我尝试了this,this,但没有给我太多帮助,但仍然有任何想法导致下面代码中出现问题。
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
中报告的早期解决答案 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
标题会自动为您设置。