Python请求库没有所有标头

时间:2013-11-21 19:18:01

标签: python rest python-requests

我正在使用python requests库来发送POST请求,我期望返回消息带有空的负载。我对返回邮件的标题感兴趣,特别是“位置”属性。我尝试了以下代码:

response=requests.request(method='POST', url=url, headers={'Content-Type':'application/json'}, data=data)
print response.headers ##Displays a case-insensitve map
print response.headers['Location'] ##blows up

奇怪的是,标题图中缺少“位置”属性。如果我在postman上尝试相同的POST请求,我会获得有效的Location属性。有没有人见过这个?这是请求库中的错误吗?

2 个答案:

答案 0 :(得分:3)

听起来一切都在按预期工作?检查你的response.history

来自Requests documentation

Requests will automatically perform location redirection for all verbs except HEAD.

>>> r = requests.get('http://github.com')
>>> r.url
'https://github.com/'
>>> r.status_code
200
>>> r.history
[<Response [301]>]

来自HTTP Location page on wikipedia

在两种情况下,HTTP服务器的响应中返回HTTP Location头字段:

  • 要求网络浏览器加载其他网页。在这种情况下,应使用HTTP状态代码3xx发送Location标头。当请求的URI具有以下内容时,Web服务器将其作为响应的一部分传递:
    • 暂时移动,或
    • 永久移动
  • 提供有关新创建资源位置的信息。在这种情况下,应使用HTTP状态代码201或202发送Location标头。1

答案 1 :(得分:1)

请求库会自动跟踪重定向。

要查看重定向,请查看请求的历史记录。文档中More details

或者在发出请求时传递额外的allow_redirects = False参数。