所有文章 > AI驱动 > Requests:API调用界的优雅绅士,告别复杂的HTTP请求!

Requests:API调用界的优雅绅士,告别复杂的HTTP请求!

大家好!今天我要介绍Python中一个超级实用的HTTP库 —— Requests。它就像一位优雅的管家,帮我们处理各种网络请求的细节。无论是获取网页内容、调用API接口,还是上传下载文件,用Requests都能轻松搞定。来跟我一起深入了解这位HTTP请求界的绅士吧!

基础请求操作

让我们先从最基本的GET请求开始:

import requests

# 发送GET请求
response = requests.get('https://api.github.com')

# 查看响应状态码
print(f"状态码: {response.status_code}")

# 查看响应内容
print(f"响应内容类型: {response.headers['content-type']}")
print(f"响应内容: {response.text[:100]}...") # 只显示前100个字符

小贴士: response对象包含了服务器响应的所有信息,不仅有内容,还有状态码、响应头等重要信息。

请求参数处理

看看如何优雅地处理URL参数:

import requests

# 使用params参数传递查询参数
params = {
'q': 'python',
'sort': 'stars',
'order': 'desc'
}

response = requests.get(
'https://api.github.com/search/repositories',
params=params
)

# 查看实际请求的URL
print(f"完整URL: {response.url}")

# 解析JSON响应
data = response.json()
print(f"查找到的仓库数量: {data.get('total_count', 0)}")

处理不同类型的请求

Requests支持所有常见的HTTP方法:

import requests

# POST请求示例
data = {'username': 'python_lover', 'password': '12345'}
response = requests.post('https://httpbin.org/post', data=data)

# PUT请求示例
response = requests.put('https://httpbin.org/put', data={'key': 'value'})

# DELETE请求示例
response = requests.delete('https://httpbin.org/delete')

# 自定义请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept': 'application/json'
}
response = requests.get('https://api.github.com/user', headers=headers)

文件上传与下载

来看看如何处理文件操作:

import requests

# 上传文件
def upload_file():
files = {
'file': ('test.txt', open('test.txt', 'rb'), 'text/plain')
}
response = requests.post('https://httpbin.org/post', files=files)
return response.json()

# 下载文件
def download_file(url, filename):
response = requests.get(url, stream=True)
if response.status_code == 200:
with open(filename, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
return True
return False

# 使用示例
# download_file('https://example.com/file.pdf', 'downloaded.pdf')

会话和Cookie处理

使用会话来维持连接和Cookie:

import requests

# 创建会话对象
session = requests.Session()

# 设置会话级别的请求头
session.headers.update({
'User-Agent': 'Mozilla/5.0',
'Accept': 'application/json'
})

# 使用会话发送请求
response = session.get('https://httpbin.org/cookies/set/sessionid/123456789')
print(f"Cookie: {session.cookies.get_dict()}")

# 后续请求会自动带上之前的Cookie
response = session.get('https://httpbin.org/cookies')
print(f"服务器看到的Cookie: {response.json()}")

异常处理

优雅地处理请求中可能出现的异常:

import requests
from requests.exceptions import RequestException

def safe_request(url):
try:
response = requests.get(url, timeout=5)
response.raise_for_status() # 检查响应状态
return response.json()
except requests.exceptions.Timeout:
print("请求超时")
except requests.exceptions.HTTPError as e:
print(f"HTTP错误: {e}")
except requests.exceptions.RequestException as e:
print(f"请求出错: {e}")
return None

# 使用示例
result = safe_request('https://api.github.com/users/invalid_user_12345')

实用技巧:

  • 使用timeout参数避免请求无限等待
  • 设置verify=False可以忽略SSL证书验证
  • 使用allow_redirects控制重定向行为
  • 通过proxies参数设置代理

常见问题提醒:

  • 注意处理请求频率限制
  • 保护敏感信息,如API密钥
  • 使用异常处理确保代码健壮性
  • 注意响应编码问题

练习项目建议:

  1. 创建一个简单的天气查询程序
  2. 实现GitHub API的基本调用
  3. 开发一个文件下载器

本文章转载微信公众号@南南闲聊

#你可能也喜欢这些API文章!