python requests 使用
环境信息
- Python 3.11.2
安装
pip install requests |
常见用法
get 请求
get 请求及响应中常用的属性
r = requests.get('https://csms.tech') |
带参数的 get 请求
要在 get 请求中携带请求参数,可以使用以下方法
help(requests.get) |
get 方法本质上是通过创建了一个 requests.Request 对象,因此 **kwargs 可用的值可以通过查看 requests.Request 的帮助信息。
help(requests.Request) |
post 请求
post 方法可以发送 POST 请求到指定 url,一般格式如下:
requests.post(url, data={key: value}, json={key: value}, args) |
url- 请求 url。data- 参数为要发送到指定 url 的字典、元组列表、字节或文件对象。json- 参数为要发送到指定 url 的 JSON 对象。args- 为其他参数,比如 cookies、headers、verify等。
提交 str 类型的 PSOT 数据
假设 HTTP POST 以下数据内容:
count_status2: DELIVRD |

以上 POST 数据转换成 URI: count_status2=DELIVRD&recv_time%5B%5D=2024-07-01+00%3A00%3A00&recv_time%5B%5D=2024-07-01+23%3A59%3A59&count=7053

针对以上内容,如果使用 字典(Dict) 类型的数据结构提交 POST 数据,因为数据中包含重复键的内容,会导致请求失败。此时可以使用 str 格式提交 POST 数据,示例代码如下:
import requests |
data 和 json 提交 POST 数据的不同
在 requests.post 方法中,data 和 json 参数的使用有所不同,它们主要区别在于 请求主体的内容类型和数据处理方式。以下是具体区别:
data参数- 内容类型 :
data参数通常用于发送 表单数据 或 原始的字符串数据。默认情况下,内容类型(Content-Type)会被设置为application/x-www-form-urlencoded,类似于 HTML 表单提交的数据格式。 - 数据处理 :
data参数接受 字典、元组列表、字符串 或 文件对象 。如果传递的是 字典 或 元组列表,requests会将其编码为 URL 编码格式。如果传递的是 字符串 或 文件对象,requests会直接使用它们的内容。
示例如下:
import requests
# 使用 data 参数发送表单数据
payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('http://example.com/api', data=payload)
print("Response code:", response.status_code)
print("Response text:", response.text)
在这个示例中,requests会将payload编码为key1=value1&key2=value2的 URL 编码格式。- 内容类型 :
json参数- 内容类型 :
json参数用于发送 JSON 格式的数据。使用json参数时,内容类型(Content-Type)会自动设置为application/json。 - 数据处理 :
json参数接受一个 字典,它会被requests库自动转换为 JSON 字符串,然后发送出去。
import requests
# 使用 json 参数发送 JSON 数据
payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('http://example.com/api', json=payload)
print("Response code:", response.status_code)
print("Response text:", response.text)在这个示例中,
requests会将payload转换为 JSON 字符串{"key1": "value1", "key2": "value2"},并将内容类型设置为application/json。- 内容类型 :
选择使用 data 还是 json
- 使用
data: 当你需要发送 表单数据 或 简单的字符串数据 时,使用data参数。 - 使用
json: 当你需要发送 JSON 数据时,使用json参数。
错误使用案例
使用 POST 方式提交以下数据到服务器
payload = { |
假如使用 data 方式提交:
resp = requests.post(url, data=payload, headers=headers) |
服务器可能会返回类似错误: response: 200, text: {"code":"000998","message":"web未知异常"}
错误原因 : 使用 data 提交 POST 数据时,requests 会将其编码为 URL 编码格式(application/x-www-form-urlencoded),尽管在请求头中明确设置了 Content-Type: application/json,但实际上传递的数据仍然是 URL 编码格式的。导致请求的内容类型(Content-Type)与服务器期望的数据格式不匹配
请求方式改为以下方式可正常返回期望的数据:
resp = requests.post(url, json=payload, headers=headers) |