我在使用requests爬取某网站的订单核销数据的时候,发现它payload参数中有一个参数值为字典,如图:
copy value出来确实是个字典:
但是我在使用requests请求的时候,直接传字典报错请求参数不合法:
后来百度了,说要先把字典转为字符串再post,但是仍然报同样的错误:
现在不知道该怎么办了,请大家帮忙看一下有没有解决的思路,万分感谢.
time_dic不需要转字符串,payload整个转字符串就可以了:
time_dic = {
"start_time": 1676304000,
"end_time": 1677254399
}
payload = {
"filter": time_dic,
"is_expend_to_poi": True,
"is_user_poi_filter": False,
"permission_common_param": ""
}
data = requests.post(req_url, headers=Headers, data = json.dumps(payload))
json.dumps(payload)
参考GPT和自己的思路:在使用requests发送POST请求时,payload参数需要是一个字符串或一个字节流,而不能是一个字典。可以使用Python的json库将字典转换成JSON字符串,然后将JSON字符串作为payload参数的值。
例如,如果你有如下的字典需要作为payload参数的值:
data = {'key1': 'value1', 'key2': 'value2'}
那么可以使用如下代码将其转换为JSON字符串:
import json
json_data = json.dumps(data)
然后将转换后的JSON字符串作为payload参数的值传递给requests的post方法:
import requests
url = 'http://example.com/api'
headers = {'Content-Type': 'application/json'}
data = {'key1': 'value1', 'key2': 'value2'}
json_data = json.dumps(data)
response = requests.post(url, headers=headers, data=json_data)
这样就可以发送包含字典类型参数的POST请求了。
“Devil组”引证GPT后的撰写:
如下所示:
import json
time_dic = {
"start_time": 1676304000,
"end_time": 1677254399
}
payload = {
"filter": json.dumps(time_dic),
"is_expend_to_poi": 'true',
"is_user_poi_filter": 'false',
"permission_common_param": ''
}
response = requests.post(req_url, headers=Headers, data=payload)
注意,上面的代码中,使用了 json.dumps() 方法将字典对象转换为 JSON 格式的字符串,然后将该字符串作为 filter 参数的值传递给了 payload。另外,如果 permission_common_param 参数的值为空字符串,可以直接省略该参数,不需要在 payload 中传递。
转成json字符串就可以了json.dumps