2013-04-09 72 views
0

为什么下列打印无?请求正文为空

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

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

+2

它不应该是'requests.request('get',...)'或'requests.get()','requests.post )'? – 2013-04-09 01:00:59

+0

请**复制粘贴**(不要键入)**精确**程序来显示错误。请参阅http://sscce.org/。 – 2013-04-09 01:07:31

回答

1

你现在的代码实际上并不起作用 - 它会立即引发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是不是真的记录,因为这是一个重大的改写。)


作为一个侧面说明...为什么你需要这个?如果你真的需要知道你发送了什么内容,为什么不做创建请求并发送它的两步过程,以便事先看到该内容? (或者,就此而言,只是明确地编码数据?)