Python中的httplib获取状态码...但太复杂了?
>>> 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
然后把这个代码放进一个函数里,传入网址作为参数。