目录
requests
是一个非常流行的第三方库,它简化了 HTTP 请求的处理过程。
一、安装 requests
如果还没有安装 requests
库,可以通过 pip 命令来安装:
pip install requests
二、基础用法
1、发送 GET 请求
最简单的请求类型是 GET 请求,用于从服务器获取信息。requests
向网站发送 GET 请求并打印响应的内容:
import requests
response = requests.get('https://httpbin.org/get')
print(response.text)
2、发送 POST 请求
POST 请求通常用于向服务器提交数据。使用 requests
发送 带有 JSON 数据的 POST 请求:
import requests
import json
data = {'key': 'value'}
headers = {'Content-Type': 'application/json'}
response = requests.post('https://httpbin.org/post', data=json.dumps(data), headers=headers)
print(response.text)
三、常见的 HTTP 方法
除了 GET 和 POST,requests
还支持其他常见的 HTTP 方法:
- PUT:更新资源。
- DELETE:删除资源。
- HEAD:获取资源头部信息。
- OPTIONS:获取资源的通信选项。
- TRACE: 用于诊断目的,让客户端能够检测中间件(如代理服务器)是否在转发请求时改变了请求或响应的内容。
- PATCH: 用于部分更新资源。与 PUT 方法不同,PUT 方法通常用于完全替换一个资源,而 PATCH 方法则允许客户端发送增量更新,即只更新资源的部分内容,而不是替换整个资源。
这些方法的使用方式与 GET 和 POST 类似。
1、 PUT
import requests
import json
url = 'https://httpbin.org/put'
# 定义要发送的数据
data = {'key': 'value'}
# 将数据转换为 JSON 格式
json_data = json.dumps(data)
headers = {'Content-Type': 'application/json'}
response = requests.put(url, data=json_data, headers=headers)
# 检查响应状态码
if response.status_code == 200:
print("PUT 请求成功!")
# 输出响应内容
print("响应内容:")
print(response.json())
else:
print(f"请求失败,状态码:{response.status_code}")
2、DELETE
import requests
url = 'https://httpbin.org/delete'
response = requests.delete(url)
# 检查响应状态码
if response.status_code == 200:
print("DELETE 请求成功!")
# 输出响应内容
print("响应内容:")
print(response.text)
else:
print(f"请求失败,状态码:{response.status_code}")
3、HEAD
import requests
url = 'https://httpbin.org/get'
response = requests.head(url)
# 检查响应状态码
if response.status_code == 200:
print("HEAD 请求成功!")
# 输出响应头信息
print("响应头信息:")
print(response.headers)
else:
print(f"请求失败,状态码:{response.status_code}")
4、OPTIONS
import requests
url = 'https://httpbin.org/anything'
response = requests.options(url)
# 检查响应状态码
if response.status_code == 200:
print("OPTIONS 请求成功!")
# 输出响应头信息
print("响应头信息:")
print(response.headers)
else:
print(f"请求失败,状态码:{response.status_code}")
5、TRACE
import requests
url = 'https://httpbin.org/anything'
response = requests.request('TRACE', url)
# 检查响应状态码
if response.status_code == 200:
print("TRACE 请求成功!")
# 输出响应内容
print("响应内容:")
print(response.text)
else:
print(f"请求失败,状态码:{response.status_code}")
6、PATCH
import requests
import json
url = 'https://httpbin.org/patch'
# 定义要发送的数据
data = {'key': 'value'}
# 将数据转换为 JSON 格式
json_data = json.dumps(data)
headers = {'Content-Type': 'application/json'}
response = requests.patch(url, data=json_data, headers=headers)
# 检查响应状态码
if response.status_code == 200:
print("PATCH 请求成功!")
# 输出响应内容
print("响应内容:")
print(response.json())
else:
print(f"请求失败,状态码:{response.status_code}")
四、处理响应
当发送请求后,requests
会返回一个 Response
对象。这个对象包含了许多有用的信息,如状态码、响应头、响应体等。
1、获取状态码
状态码用来表示请求的结果。例如,200 表示成功,404 表示找不到资源。
import requests
response = requests.get('https://httpbin.org/get')
print(response.status_code)
2、获取响应头
响应头包含了关于响应的元数据,例如 Content-Type。
import requests
response = requests.get('https://httpbin.org/get')
print(response.headers)
print(response.headers.get('Content-Type'))
3、获取响应体
响应体是服务器返回的实际数据。
import requests
response = requests.get('https://httpbin.org/get')
print(response.text) # 获取文本格式的数据
print(response.json()) # 如果响应是 JSON 格式,可以直接转换为 Python 字典
print(response.content) # 原始字节流,处理二进制数据,适用于下载文件、图片或二进制数据。处理非文本数据时,如音频、视频文件等。
4、修改响应体编码
获取文本数据时,响应体的编码不正确,通过encoding修改编码
1)apparent_encoding
apparent_encoding
是基于内容猜测的,不一定总是准确。
import requests
# 发送请求
response = requests.get('https://httpbin.org/get')
# 检查原始编码
print("Original encoding:", response.encoding)
# 如果响应的编码不是UTF-8,尝试使用apparent_encoding
if response.encoding != 'utf-8':
response.encoding = response.apparent_encoding
# 现在尝试解析内容
try:
# 使用正确的编码来解码内容
content = response.content.decode(response.encoding)
# 进行处理,比如解析text
print(content)
except UnicodeDecodeError: