【问题标题】:How do I get HTTP header info without authentication using python?如何在不使用 python 进行身份验证的情况下获取 HTTP 标头信息?
【发布时间】:2012-04-17 15:49:30
【问题描述】:

我正在尝试编写一个简单地显示网站标题信息的小程序。代码如下:

import urllib2

url = 'http://some.ip.add.ress/'

request = urllib2.Request(url)

try:
    html = urllib2.urlopen(request)
except urllib2.URLError, e:
    print e.code
else:
    print html.info()

如果 'some.ip.add.ress' 是 google.com,则返回标头信息没有问题。但是,如果它是一个需要在访问之前进行基本身份验证的 IP 地址,那么它会返回 401。有没有办法在没有身份验证的情况下获取标头(或任何其他)信息?


我已经解决了。

由于未经授权的访问而尝试失败后,以下修改将打印头信息:

print e.info()

代替:

print e.code()

感谢收看 :)

【问题讨论】:

  • 没关系,我已经解决了。在错误时打印 e.info() 仍在学习 python....
  • 发布您的解决方案作为此问题的答案。

标签: python http authentication http-headers


【解决方案1】:

如果你只想要标题,而不是使用urllib2,你应该去更低的级别并使用httplib

import httplib
conn = httplib.HTTPConnection(host)
conn.request("HEAD", path)
print conn.getresponse().getheaders()

【讨论】:

  • 我之前厌倦了,收到了 401。你的方法很好用!谢谢你
  • 我似乎又遇到了问题,python 控制台正在返回 [Errno 104] Connection reset by peer,我不确定这意味着什么。我是同伴,但我没有重置任何东西,是吗!?
  • 很可能意味着另一端不接受 HTTP 连接。
  • 你会这么认为,但我可以通过我的 chrome 浏览器访问和登录。我的原始代码(在顶部)也可以正常工作并且返回标题没有问题!街道
  • 我认为最好展示如何使用 urllib2 执行 HEAD 请求,而不是降低级别。
【解决方案2】:

如果您想要的只是 HTTP 标头,那么您应该发出 HEAD 而不是 GET 请求。你可以通过阅读Python - HEAD request with urllib2来了解如何做到这一点。

【讨论】:

    猜你喜欢
    • 2013-06-25
    • 2016-12-15
    • 1970-01-01
    • 2018-02-18
    • 2019-01-11
    • 2017-12-23
    • 2016-08-12
    • 2011-10-06
    • 1970-01-01
    相关资源
    最近更新 更多