>>> 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,因为我不想下载文件
答案 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,因此您最终还是会检索资源。你应该相应地编写代码。