Python请求:如何在正文中输入字符串?

时间:2013-04-25 00:54:41

标签: python http rest python-requests

我需要将来自字符串(无字典)的数据作为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

1 个答案:

答案 0 :(得分:5)

即使在三次尝试澄清问题之后,仍然不清楚你在这里问的是什么,但我可以试着扔出足够的信息,你可以找出答案。

首先,r = requests.put(url, data = string)返回Response,其中没有body,但它的requesthistory为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}}

然后手动执行重定向处理。