requests是Python中最流行的HTTP库之一,它简化了发送HTTP请求的过程。通过requests库,开发者可以轻松地发送各种HTTP请求(如GET、POST、PUT、DELETE等),处理响应,支持会话管理、重定向、代理、文件上传等功能,是Web开发和API交互中不可或缺的工具。
一、安装requests库
首先,确保你已经安装了requests库。如果没有安装,可以通过pip命令轻松安装:
bashCopy Codepip install requests
安装完成后,即可在代码中导入并使用该库。
二、基本用法
requests库提供了简单易用的API来进行HTTP请求操作。最常见的请求方法包括GET、POST、PUT、DELETE等。以下是几种常见请求的示例:
1. 发送GET请求
GET请求用于从服务器获取资源,通常用于浏览器访问网页。
pythonCopy Codeimport requests
# 发送GET请求
response = requests.get('https://httpbin.org/get')
# 打印响应的状态码
print(response.status_code)
# 打印响应的文本内容
print(response.text)
# 打印响应的JSON内容(如果响应为JSON格式)
print(response.json())
解析:
status_code: 返回HTTP响应的状态码,如200表示请求成功。
text: 返回响应的内容,通常是字符串形式。
json(): 将响应内容解析为JSON格式(如果响应是JSON格式的话)。
2. 发送POST请求
POST请求用于向服务器提交数据。常用于表单提交或API数据交互。
pythonCopy Codeimport requests
# 要发送的数据(可以是字典、JSON等格式)
data = {'username': 'john_doe', 'password': '123456'}
# 发送POST请求
response = requests.post('https://httpbin.org/post', data=data)
# 打印响应内容
print(response.status_code)
print(response.json())
解析:
data: POST请求的表单数据(可以是字典、列表、字符串等)。
json(): 可以直接解析返回的JSON格式响应。
3. 发送PUT请求
PUT请求用于更新资源。类似于POST请求,但通常用于更新现有资源。
pythonCopy Codeimport requests
data = {'username': 'john_doe', 'password': 'newpassword123'}
# 发送PUT请求
response = requests.put('https://httpbin.org/put', data=data)
print(response.status_code)
print(response.json())
4. 发送DELETE请求
DELETE请求用于删除服务器上的资源。
pythonCopy Codeimport requests
# 发送DELETE请求
response = requests.delete('https://httpbin.org/delete')
print(response.status_code)
print(response.json())
三、请求参数与头部设置
1. 传递URL参数(Query参数)
GET请求可以在URL中附加参数。你可以通过params参数传递这些查询字符串。
pythonCopy Codeimport requests
# 发送带有查询参数的GET请求
params = {'search': 'python', 'page': 2}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url) # 打印最终的URL
print(response.json()) # 打印返回的JSON数据
解析:
params: 将字典类型的查询参数附加到请求URL中。
2. 自定义请求头(Headers)
你可以通过headers参数传递自定义请求头信息,通常用于设置User-Agent、Authorization等信息。
pythonCopy Codeimport requests
headers = {'User-Agent': 'Mozilla/5.0', 'Authorization': 'Bearer <token>'}
response = requests.get('https://httpbin.org/headers', headers=headers)
print(response.json()) # 打印响应的头部信息
解析:
headers: 用于设置HTTP请求头,如User-Agent、Content-Type、Authorization等。
3. 传递JSON数据
如果要发送JSON数据,可以使用json参数。requests会自动将字典数据转为JSON格式并设置正确的Content-Type头部。
pythonCopy Codeimport requests
data = {'name': 'John', 'age': 30}
# 发送POST请求,传递JSON数据
response = requests.post('https://httpbin.org/post', json=data)
print(response.json())
四、会话管理与Cookie
requests库还提供了会话管理功能,允许你保持某个会话的状态,跨多个请求保持Cookie、身份验证等信息。
pythonCopy Codeimport requests
# 创建一个会话对象
session = requests.Session()
# 第一次请求,保存cookie
response = session.get('https://httpbin.org/cookies/set?name=foo&value=bar')
print(response.status_code)
# 第二次请求,带上之前保存的cookie
response = session.get('https://httpbin.org/cookies')
print(response.json()) # 查看cookie信息
解析:
使用Session对象可以自动管理Cookie和会话信息。
五、文件上传与下载
1. 文件上传
通过files参数,你可以上传文件。在发送POST请求时,通常会使用这个参数。
pythonCopy Codeimport requests
# 要上传的文件
files = {'file': open('example.txt', 'rb')}
# 发送文件上传请求
response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
2. 文件下载
你可以使用requests下载文件,并将文件内容写入本地。
pythonCopy Codeimport requests
url = 'https://www.example.com/somefile.zip'
# 发送GET请求下载文件
response = requests.get(url, stream=True)
# 保存文件到本地
with open('downloaded_file.zip', 'wb') as f:
for chunk in response.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
print("文件下载完成")
解析:
stream=True: 使得响应体以流的方式处理,适用于大文件下载。
iter_content(): 按块读取文件内容。
六、错误处理与调试
1. 错误处理
在发送请求时,你可能遇到一些网络问题或服务器错误。requests提供了异常处理机制,常用的异常类包括:
requests.exceptions.RequestException: 基类,所有请求异常的基类。
requests.exceptions.HTTPError: HTTP响应错误。
requests.exceptions.Timeout: 请求超时。
requests.exceptions.ConnectionError: 网络连接错误。
pythonCopy Codeimport requests
try:
response = requests.get('https://httpbin.org/status/404')
response.raise_for_status() # 如果响应状态码不是2xx,会抛出HTTPError
except requests.exceptions.HTTPError as err:
print(f"HTTP错误: {err}")
except requests.exceptions.RequestException as err:
print(f"请求错误: {err}")
2. 调试请求
你可以使用requests的response对象获取更详细的调试信息,例如响应头、请求体等。
pythonCopy Codeimport requests
response = requests.get('https://httpbin.org/get')
print(f"请求URL: {response.url}")
print(f"请求头: {response.request.headers}")
print(f"响应头: {response.headers}")
print(f"响应文本: {response.text}")
requests库提供了简单且强大的功能,使得Python开发者能够轻松地进行HTTP请求。通过掌握基本的GET、POST请求的使用方法,结合会话管理、文件上传下载、错误处理等技巧,可以应对绝大多数的网络请求需求。希望本篇文章能帮助你快速上手并高效使用requests库进行Web请求。