Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3.4请求正文格式错误_Python_Json_Python Requests_Python 3.4 - Fatal编程技术网

Python3.4请求正文格式错误

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):

在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):
    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)