Python 请求:如何将字符串放入正文中?

问题描述 投票:0回答:2

我需要将字符串(非字典)中的数据作为 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-requests 1.2.0

python http rest python-requests
2个回答
10
投票

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

首先,

r = requests.put(url, data = string)
返回一个
Response
,它没有
body
,但它确实有一个
request
,以及0个或多个重定向请求的
history
,所有这些都是
PreparedRequest
对象,它们确实具有
body
属性。

另一方面,如果你这样做了

r.requests.Request(method='PUT', url=url, data=string)
,那将返回一个
Request
,它必须在它拥有主体之前被
prepare()
d。

无论哪种方式,如果我做一个简单的测试并查看结果,我发现

body
总是正确的:

>>> 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
,或类似的东西。

如果快速入门教程中的重定向和历史记录没有帮助,请阅读详细的 API 文档,或者尝试所有这些文档,直到找到答案。

或者这样做:

resp = request.put('http://localhost/nosuchurl', data='abc', allow_redirects=False)

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


0
投票

在正文中发送 json 字符串:

response = requests.put(url, data=json.dumps(json_string))
© www.soinside.com 2019 - 2024. All rights reserved.