我需要将来自字符串(无字典)的数据作为REST API调用的主体 当我打电话
r = requests.put(url, data = string)
然后我可以在r.request.body
之后看到它是None
。此外,服务器响应“411 Length Required”错误。
但是,当我使用dict而不是字符串尝试它时,它可以工作,因为服务器使用正确的JSON数据进行响应。此外,在这种情况下,我可以在r.request.body
中看到正确的数据。
有什么想法吗?
PS:我使用的是Python 2.7.3和Python请求1.2.0
答案 0 :(得分:5)
即使在三次尝试澄清问题之后,仍然不清楚你在这里问的是什么,但我可以试着扔出足够的信息,你可以找出答案。
首先,r = requests.put(url, data = string)
返回Response
,其中没有body
,但它的request
和history
为0或更多重定向请求,所有这些都是PreparedRequest
个对象,具有body
个属性。
另一方面,如果您执行了r.requests.Request(method='PUT', url=url, data=string)
,则会返回Request
,该prepare()
必须是body
d才能拥有正文。
无论哪种方式,如果我做一个简单的测试并查看结果,我发现>>> resp = requests.put('http://localhost/nosuchurl', data='abc')
>>> resp.request.body
'abc'
>>> resp = requests.put('http://localhost/redirect_to_https', data='abc')
>>> resp.history[-1].request.body
'abc'
>>> req = requests.Request(method='PUT', url='http://localhost/nosuchurl', data='abc')
>>> preq = req.prepare()
>>> preq.body
'abc'
始终是正确的:
resp.history[0].request.body
我最好的猜测是,您需要查看resp.request.body
,但是您正在查看resp = request.put('http://localhost/nosuchurl', data='abc', allow_redirects=False)
或类似内容。
如果快速入门教程中的Redirection and History没有帮助,请阅读详细的API文档,或者只是尝试所有这些文档,直到找到它为止。
或者这样做:
{{1}}
然后手动执行重定向处理。