res = requests.put(url=self.URL, json=self.output) # gives <Response [200]>
res = requests.put(url=self.URL, data=self.output) # gives <Response [500]>
这是我要上传的字典的示例:
{u'RPT6': '22,4', u'RPT7': '13,2', u'RPT4': '4,1', u'RPT5': '13,1', u'RPT2': '18,4', u'RPT3': '7,1', u'RPT1': '1,1', 'Last Change Time': '2017/09/19 - 16:24:28', u'RPT8': '5,1', u'RPT9': '10,3', '
Last Change Author': 'CNBCN477QB', u'RPT10': '22,4', u'RPT11': '22,3', u'RPT12': '15,3'}
此dictonary是使用www.myjson.com
方法从同一网址requests.get
获取的原始json文件的修改。因此我理解服务器没有问题。在被叫the related documentation之后,我无法发现为什么我会收到该错误,因为它清楚地表明字典的使用符合data
参数。
答案 0 :(得分:1)
区别在于data
参数会对您的数据进行urlencode并创建'application / x-www-form-urlencoded'Content-Type标头,而json
参数将发送json格式化数据和'application / json'Content-Type标头。
让我们看看服务器使用data
参数收到的内容:
data = {'key 1':'a string', 'key 2': 2, 'key 3':True}
res = requests.put('http://somesite.com', data=data)
print(res.request.method + ' / HTTP/1.1')
print('\r\n'.join(': '.join(i) for i in res.request.headers.items()))
print()
print(res.request.body)
PUT / HTTP / 1.1
连接:保持活力
Accept-Encoding:gzip,deflate
接受: /
User-Agent:python-requests / 2.18.1
内容长度:33
内容类型:application / x-www-form-urlencodedkey + 1 = a + string&amp; key + 2 = 2&amp; key + 3 = True
现在让我们使用json
参数发送相同的数据:
data = {'key 1':'a string', 'key 2': 2, 'key 3':True}
res = requests.put('http://somesite.com', json=data)
print(res.request.method + ' / HTTP/1.1')
print('\r\n'.join(': '.join(i) for i in res.request.headers.items()))
print()
print(res.request.body)
PUT / HTTP / 1.1
连接:保持活力
Accept-Encoding:gzip,deflate
接受: /
User-Agent:python-requests / 2.18.1
内容长度:48
Content-Type:application / json{“key 1”:“a string”,“key 2”:2,“key 3”:true}
正如您所看到的,两个HTTP请求非常不同。