Python中的httplib获取状态码...但太复杂了?

0 投票
6 回答
3203 浏览
提问于 2025-04-15 15:59
>>> 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”分成了两行。

这样看起来有点让人困惑。

如果我只想查找一个普通网址的状态码怎么办???

http://mydomain.com/sunny/boo.avi
http://anotherdomain.com/podcast.mp3
http://anotherdomain.com/rss/fee.xml

难道我不能直接把网址放进去,让它工作吗?

补充一下...我不能使用urllib,因为我不想下载文件。

6 个回答

2

connect 方法需要一个服务器地址(可以选择性地加上端口号)。你需要把连接和你真正想要的资源分开。

如果你想更简单地直接下载网络资源,可以使用 urllib2,不过 urllib2 只支持 GET 或 POST 方法,不支持 HEAD,所以你最后会下载整个资源。

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
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

然后把这个代码放进一个函数里,传入网址作为参数。

撰写回答