Python请求有效载荷格式

时间:2018-07-24 17:52:52

标签: python

我正在使用请求库处理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错误。第一个有效负载按预期工作。有任何想法吗?

2 个答案:

答案 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