Python中post请求参数的问题如何解决?
response=requests.post(url=‘http://vip.api.qimingpian.com/h/persons1’,data=form_data,headers=headers)
response=requests.post(url=‘http://vip.api.qimingpian.com/h/persons1’,param=form_data,headers=headers)
这里的 param 和 data 啥区别
Python中post请求参数的问题如何解决?
data 是 str,param 是 dict
param = {‘a’:1, ‘b’:2}
data = ‘a=1&b=2’
帖子回复:
遇到Python里POST请求参数传不对的问题,最常见的就是requests.post()的data、json、params这几个参数用混了,或者格式没整对。我直接给你几个典型场景和对应的代码,跑一遍就清楚了。
场景1:发送表单数据(application/x-www-form-urlencoded)
这是最常见的表单提交,用data参数,传个字典就行。requests会自动帮你处理好编码和请求头。
import requests
url = 'https://httpbin.org/post'
payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.post(url, data=payload)
print(response.json())
场景2:发送JSON数据(application/json)
现在很多API都收JSON。直接用json参数,传个字典(或列表)。库会帮你转成JSON字符串,并设置正确的Content-Type。
import requests
url = 'https://httpbin.org/post'
payload = {'name': 'John', 'age': 30, 'city': 'New York'}
response = requests.post(url, json=payload)
print(response.json())
千万别自己用json.dumps()转成字符串再用data传,那样Content-Type不对,很容易出错。
场景3:URL里带查询参数(Query String)
有时候POST请求的URL本身也需要参数,用params。
import requests
url = 'https://httpbin.org/post'
params = {'token': 'abc123'}
payload = {'data': 'some data'}
response = requests.post(url, params=params, json=payload)
print(response.url) # 会看到URL后面带了 ?token=abc123
print(response.json())
场景4:需要自定义头信息或复杂格式 遇到刁钻的接口,可能要自己拼字符串、设请求头。
import requests, json
url = 'https://httpbin.org/post'
# 比如非要一个非标准的JSON格式(虽然不常见)
custom_data = json.dumps({'query': 'special'}, separators=(',', ':'))
headers = {'Content-Type': 'application/json', 'X-Custom-Header': 'MyValue'}
response = requests.post(url, data=custom_data, headers=headers)
print(response.json())
怎么快速定位问题?
- 先看请求头:特别是
Content-Type对不对。用response.request.headers可以查看实际发出的请求头。 - 对比成功和失败的请求:用浏览器开发者工具或抓包工具(如Fiddler、Charles)抓一个能成功的请求,看看它的参数格式、编码,然后在你代码里完全复现。
- 打印调试信息:
r = requests.post(...) print('Request Headers:', r.request.headers) print('Request Body:', r.request.body) print('Response Status Code:', r.status_code) print('Response Text:', r.text)
总结:九成问题出在没分清data和json参数,或者请求头不对。
一句话建议:明确接口要什么格式,选对data或json参数,拿不准就抓包对比。
你可以这样理解,
param 出现在 URL 地址上,
data 不出现。
出现在 url 地址上直接 get 不就可以了
一个网站的 Form_data post 参数是这样的,那我是传 Data 还是 param ?因为你这样看也不知道是 dict 还是 str
page: 1
num: 50
w:
ptype: qmp_pc
version: 2.0
unionid: ETXncbCRyisjw/hr0zeTaonhpvkz/81ntwbBWAKYE4wdmhbtHCwxkjwb+0gjVdRzeJWqqIs6kiQsM8IbOYgM5A==
jtype: vip
time_token: 1532254367533
params 的内容会带在 url 后面,作为 query string, 比如 https://www.baidu.com?xxx=yyy&aaa=bbb
能用搜索引擎搜索到的问题为什么要提个问题呢?
https://stackoverflow.com/a/24535938/4614538
params 是往 url 后面添加参数。
params 是 url ?后那种; data 是 form 表单、file 类,在请求的 body 中。
多谢指正。
你的问题 说的很清楚。


