我正在使用请求库处理POST请求。
如果我在有效载荷中使用回车符,则我的帖子请求可以正常工作,例如:
payload = "{\r\n \"name\": \r\n {\r\n \"@action\": \"login\",\r\n \"@appname\": \"app\",\r\n \"@class\": \"login\",\r\n \"@nocookie\": 1,\r\n \"@code\": \"101\",\r\n \"@psw\": \"12345\",\r\n \"@relogin\": \"0\",\r\n \"@username\": \"user123\"\r\n }\r\n}\r\n"
但是,如果我将其格式化以使有效负载看起来很漂亮,则请求将无法正常工作
payload = {
'name':
{
'@action': "login",
'@appname': "app",
'@class': "login",
'nocookie': 1,
'@code': "101",
'psw': "12345",
'@relogin': "0",
'@username': "user123"
}
}
使用第二个有效负载时出现500错误。第一个有效负载按预期工作。有任何想法吗?
答案 0 :(得分:2)
很有可能,您只需要首先使用function json.dumps
从结构中创建JSON字符串即可:
barrier.wait()
然后使用data = json.dumps(payload)
变量代替原来的data
。
答案 1 :(得分:1)
摘自requests
的文档:
例如,GitHub API v3接受JSON编码的POST / PATCH数据:
>>> import json >>> url = 'https://api.github.com/some/endpoint' >>> payload = {'some': 'data'} >>> r = requests.post(url, data=json.dumps(payload))
除了自己对dict进行编码外,您还可以使用json参数(在2.4.2版中添加)直接传递dict,它将自动进行编码:
>>> url = 'https://api.github.com/some/endpoint' >>> payload = {'some': 'data'} >>> r = requests.post(url, json=payload)
如果您有字典,并且API接受JSON,则只需传递json=payload
。