Python中的httplib获取状态代码......但是它太棘手了?

时间:2009-11-13 20:22:04

标签: python regex http http-headers

>>> import httplib
>>> conn = httplib.HTTPConnection("www.google.com")
>>> conn.request("HEAD", "/index.html")
>>> res = conn.getresponse()
>>> print res.status, res.reason
200 OK

此代码将获取HTTP状态代码。但请注意,我将“google.com”和“/index.html”拆分为2行。

这令人困惑。

如果我想找到一般网址的状态代码???

,该怎么办?
http://mydomain.com/sunny/boo.avi
http://anotherdomain.com/podcast.mp3
http://anotherdomain.com/rss/fee.xml

我不能只是将网址粘贴到其中,并使其有效吗?

编辑...我不能使用urllib,因为我不想下载文件

6 个答案:

答案 0 :(得分:6)

也许您最好使用URL库?

在Python 2中,使用urllib2

>>> import urllib2
>>> url = urllib2.urlopen("http://www.google.com/index.html")
>>> url.getcode()
200

在Python 3中,使用urllib.request

>>> import urllib.request
>>> url = urllib.request.urlopen("http://www.google.com/index.html")
>>> url.getcode()
200

答案 1 :(得分:6)

或者,如果您希望实际下载数据存在问题并且您确实需要HEAD方法,则可以使用urlparse解析网址:

>>> import httplib
>>> import urlparse
>>> url = "http://www.google.com/index.html"
>>> (scheme, netloc, path, params, query, fragment) = urlparse.urlparse(url)
>>> conn = httplib.HTTPConnection(netloc)
>>> conn.request("HEAD", urlparse.urlunparse(('', '', path, params, query, fragment))
>>> res = conn.getresponse()
>>> print res.status, res.reason
302 Found

将此包装成一个以URL作为参数的函数。

答案 2 :(得分:2)

connect方法采用服务器参数(带有可选端口)。您必须将连接与实际需要的资源分开。

对于直接下载Web资源的简单方法,您可以使用urllib2,但urllib2仅支持GET或POST方法,不支持HEAD,因此您最终会下载整个资源。

答案 3 :(得分:0)

根据spec你应该把它分开来,也许Python可以为你抽象一点,他们可能只是让你直接访问标题所以你知道如何它正在被格式化,这确实是首选。

答案 4 :(得分:0)

我喜欢urllib2,示例代码:

import urllib2
res = urllib2.urlopen('http://google.com/index.html')
res.getCode() #contains code

我出了点问题,你会得到一个你能抓到的例外。

编辑:谢谢,将res.code更改为res.getCode(),因为记录了第二个

答案 5 :(得分:0)

请记住,并非所有Web服务器都支持每个资源上的HEAD,因此您最终还是会检索资源。你应该相应地编写代码。