requests请求时payload中参数值为字典,请求报错

我在使用requests爬取某网站的订单核销数据的时候,发现它payload参数中有一个参数值为字典,如图:

img

copy value出来确实是个字典:

img

但是我在使用requests请求的时候,直接传字典报错请求参数不合法:

img

后来百度了,说要先把字典转为字符串再post,但是仍然报同样的错误:

img

现在不知道该怎么办了,请大家帮忙看一下有没有解决的思路,万分感谢.

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后的撰写:

  • 似乎问题出在 payload 中的 filter 参数值是一个字典的字符串,而不是一个字典对象。这是因为网站的 API 接口可能需要接收 JSON 格式的数据,而在 HTTP 请求中,JSON 数据需要以字符串的形式传输。
  • 因此,你可以将字典对象转换为 JSON 格式的字符串,然后将该字符串作为 payload 中 filter 参数的值

如下所示:

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