为什么以下打印无?
import requests
r = requests.request('http://cnn.com', data={"foo":"bar"})
print r.request.body
# None
如果您将cnn.com更改为www.cnn.com,它会打印正确的正文。我注意到了一个重定向(r.history中有一个301)。发生了什么事?
答案 0 :(得分:2)
您的代码实际上并不起作用 - 它会立即引发TypeError
。但我想我可以猜到你想要做什么。
如果您将request
更改为post
,它确实会成功返回None
。
为什么呢?因为您要求重定向的正文,而不是原始请求的正文。为此,您需要r.history[0].request.body
。
阅读Redirection and History了解详情。请注意,自动重定向实际上并未记录为适用于POST请求,即使它经常会发生。另请注意,在早期版本的requests
中,history
条目没有完整的Request
个对象。 (你需要看看version history,如果你需要知道什么时候发生了变化。但它似乎存在于1.2.0中,而不是0.14.2中 - 并且很多东西都被添加或者1.0.0中的更改并未真正记录,因为它是一次重大改写。)
作为旁注......你为什么需要这个?如果你真的需要知道你发送了什么样的身体,为什么不做两步创建请求并发送它,所以你可以事先看到身体? (或者,就此而言,只是明确地对数据进行编码?)