应为类型为“dict”的可迭代数据指定Content-Length

时间:2015-06-03 09:30:05

标签: python python-3.4

我尝试了thisthis,但没有给我太多帮助,但仍然有任何想法导致下面代码中出现问题。

try:
    request = urllib.request.Request(url,data=payload,method='PUT',headers={'Content-Type': 'application/json'})
    response = urllib.request.urlopen(request)
except Exception as e:
    print(str(e))

得到错误: - 应为类型为“dict”的可迭代数据指定Content-Length

Python版本:3.4

我认为问题应该在Python 3.2 here

中报告的早期解决

1 个答案:

答案 0 :(得分:8)

urllib.request不支持传入未编码的词典;如果您要发送JSON数据,则需要该字典编码自己编写为JSON:

import json

json_data = json.dumps(payload).encode('utf8')
request = urllib.request.Request(url, data=json_data, method='PUT',
                                 headers={'Content-Type': 'application/json'})

您可能想要查看安装requests library;它支持使用json关键字参数为开箱即用的请求体编码JSON:

import requests

response = requests.put(url, json=payload)

请注意,Content-Type标题会自动为您设置。