3

为什么以下打印无?

import requests
r = requests.request('http://cnn.com', data={"foo":"bar"})
print r.request.body
# None

如果将 cnn.com 更改为 www.cnn.com,它会打印正确的正文。我注意到一个重定向(r.history 中有一个 301)。这是怎么回事?

4

1 回答 1

2

你的代码实际上并不能正常工作——它会立即提出一个TypeError问题。但我想我可以猜到你想要做什么。

如果将其更改request为 a post,它确实会成功返回None

为什么?因为您要的是重定向的正文,而不是原始请求的正文。为此,您想要r.history[0].request.body.

阅读重定向和历史以获取更多信息。请注意,实际上并没有记录自动重定向可用于 POST 请求,即使它经常这样做。另请注意,在早期版本中requestshistory条目没有完整的Request对象。(如果您需要知道版本历史何时更改,则必须查看版本历史记录。但它似乎在 1.2.0 中,而不是在 0.14.2 中 - 并且在 1.0 中添加或更改了很多东西.0 并没有真正记录在案,因为它是一次重大的重写。)


作为旁注......你为什么需要这个?如果你真的需要知道你发送了什么body,为什么不做一个创建请求并发送它的两步过程,这样你就可以事先看到body?(或者,就此而言,只是对数据进行显式编码?)

于 2013-04-09T01:16:46.387 回答