Python3.4请求正文格式错误
在Python3.4中,我使用请求和for循环组合获取JSON内容的多项目API请求的主体。即使主体变量被识别为类型为()的str类,它也会产生HTTP 400错误。但是,如果我打印内容并将其复制到一个新变量中,则会成功。正在进行哪种格式设置Python3.4请求正文格式错误,python,json,python-requests,python-3.4,Python,Json,Python Requests,Python 3.4,在Python3.4中,我使用请求和for循环组合获取JSON内容的多项目API请求的主体。即使主体变量被识别为类型为()的str类,它也会产生HTTP 400错误。但是,如果我打印内容并将其复制到一个新变量中,则会成功。正在进行哪种格式设置 import requests,json list_length = len(namelist) #namelist arranged earlier in code payload='[' for x in range(0, list_length):
import requests,json
list_length = len(namelist) #namelist arranged earlier in code
payload='['
for x in range(0, list_length):
payload += '{"name": "'+ namelist[x] + '"}'
if x<list_length-1:
payload += ', '
payload += ']'
url = 'http://api.turfgame.com/v4/users'
headers = {'Content-Type': 'application/json'}
req = requests.post(url, data=json.dumps(payload),headers=headers)
>>> payload
'[{"name": "sune"}, {"name": "Demon"}, {"name": "kingenin"}]'
导入请求,json
列表_length=len(名称列表)#代码中前面排列的名称列表
有效载荷='['
对于范围内的x(0,列表长度):
有效负载+='{“名称”:“'+namelist[x]+'''}”
如果x>>有效载荷
“[{”name:“sune”},{”name:“Demon”},{”name:“kingenin”}”
您正在创建一个JSON字符串,然后将其编码为JSON字符串。这种双重编码不是您想要的:
>>> payload = '[{"name": "sune"}, {"name": "Demon"}, {"name": "kingenin"}]'
>>> print(json.dumps(payload))
"[{\"name\": \"sune\"}, {\"name\": \"Demon\"}, {\"name\": \"kingenin\"}]"
这是一个JSON字符串,包含一个带引号的JSON列表
构建一个列表,并将其传递给json.dumps()
:
这将发送一个正确的JSON列表:
>>> payload
[{'name': 'sune'}, {'name': 'Demon'}, {'name': 'kingenin'}]
>>> print(json.dumps(payload))
[{"name": "sune"}, {"name": "Demon"}, {"name": "kingenin"}]
您也可以在构建时发送有效负载
,而无需将其传递给json.dumps()
,但为什么要养一只狗自己吠叫呢
如果要使用requests
version 2.4.2或更高版本,可以让它为您处理JSON编码;将Python对象传递到JSON
关键字参数中,它甚至会设置正确的内容类型头:
payload = [{'name': name} for name in namelist]
url = 'http://api.turfgame.com/v4/users'
req = requests.post(url, json=payload)
请求最多只支持Python 3.3,而不是3.4。至少目前还不支持。正如Martijn指出的,我们还不支持3.4,因为它是预发布的。尽管如此,我们不希望出现任何问题:如果有,请告诉我们。
payload = [{'name': name} for name in namelist]
url = 'http://api.turfgame.com/v4/users'
req = requests.post(url, json=payload)