我的代码是这样写的 idsdata = {'id':100,'skiids':[1,2,3,7]} headersjson={ 'Content-Type':'application/json', 'Accept':'application/json', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36' }
requests.get(url='http://XXXXX',data=json.dumps(idsdata),headers=headersjson,)
传参之后在浏览器里面应该是这样的
id: 100 skiids[]: 1 skiids[]: 2 skiids[]: 3 skiids[]: 7
但是这行一直报错 应该是传参的格式不对,requests.get(url='http://XXXXX',data=json.dumps(idsdata),headers=headersjson,)
之前没写过这种,网上没找到太多相关的,看得不太明白
求教了
1
ClericPy 2020-05-16 17:17:13 +08:00
直接盲猜啊... 没 Python 版本, 没网址, 没报错信息... 你发个 curl 也行...
随便回答下吧: 如果是 Python3, data 参数要么是 dict 要么是 bytes, 所以你试试 encode 一下, 或者直接改用 json=dict 的方式, Requests 自动帮你 dumps 和 encode |
3
littleylv 2020-05-16 17:23:37 +08:00
requests.get(url='http://XXXXX',params=idsdata,headers=headersjson,)
python 用的不多,盲猜一下 get 用 params post 用 data 另外不需要 json.dumps PS: 遇到问题先看看手册你传参符不符合要求 |
5
littleylv 2020-05-16 17:26:45 +08:00
实测:
Python 3.7.7 (default, Mar 10 2020, 15:43:33) [Clang 11.0.0 (clang-1100.0.33.17)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import requests >>> idsdata = {'id':100,'skiids':[1,2,3,7]} >>> res = requests.get('http://httpbin.org/get', params=idsdata) >>> res.json() {'args': {'id': '100', 'skiids': ['1', '2', '3', '7']}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.22.0', 'X-Amzn-Trace-Id': 'Root=1-5ebfb190-43a2c3f9e127ee27bad4de17'}, 'origin': 'xxx', 'url': 'http://httpbin.org/get?id=100&skiids=1&skiids=2&skiids=3&skiids=7'} >>> res = requests.get('http://httpbin.org/get', data=idsdata) >>> res.json() {'args': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '42', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.22.0', 'X-Amzn-Trace-Id': 'Root=1-5ebfb1a4-8c65a9f67209c70e1b262f85'}, 'origin': 'xxx', 'url': 'http://httpbin.org/get'} |
6
Colorful OP @littleylv 有个比较奇怪的问题
requests.get(url='http://XXXXX',params=idsdata,headers=headersjson,) 改成这样之后,确实能够请求到接口,但是返回的数据不太对 以这个数据为例: idsdata = {'id':100,'skiids':[1,2,3,7]} 因为我看到浏览器里面请求是这样的 id:100, skiids:1, skiids:2, skiids:3, skiids:7, 正确应该是这样的 skiids[]:1, skiids[]:2, skiids[]:3, skiids[]:7, |