Python中的httplib来获取状态代码…但这太棘手了?

Python中的httplib来获取状态代码…但这太棘手了?,python,regex,http,http-headers,Python,Regex,Http,Http Headers,此代码将获取HTTP状态代码。但是,请注意,我将google.com和/index.html拆分为两行 这让人困惑 如果我只想找到一个普通URL的状态码呢 >>> import httplib >>> conn = httplib.HTTPConnection("www.google.com") >>> conn.request("HEAD", "/index.html") >>> res = conn.getrespons

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

这让人困惑

如果我只想找到一个普通URL的状态码呢

>>> import httplib
>>> conn = httplib.HTTPConnection("www.google.com")
>>> conn.request("HEAD", "/index.html")
>>> res = conn.getresponse()
>>> print res.status, res.reason
200 OK
我不能把URL插入其中,让它工作吗


编辑…我不能使用urllib,因为我不想根据规范将文件降级,你应该这样将其拆分,也许Python可以为你抽象一点,他们可能只是让你直接访问标题,以便你确切地知道它的格式,这才是您的首选。

也许您最好改用URL库

在Python 2中,使用:

在Python 3中,使用:

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


为了更简单地直接下载web资源,您可以使用urllib2,但urllib2只支持GET或POST方法,不支持HEAD,因此您最终可以下载整个资源。

我喜欢urllib2,示例代码:

>>> import urllib.request
>>> url = urllib.request.urlopen("http://www.google.com/index.html")
>>> url.getcode()
200
如果我出了什么问题,你会得到一个例外,你可以抓住


编辑:谢谢,将res.code更改为res.getCode,因为第二个已记录在案。

或者,如果您认为实际下载数据有问题,并且确实需要HEAD方法,您可以使用以下方法解析URL:


并将其封装到一个以URL为参数的函数中。

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

+1,但正如Yann在下面指出的,这将下载整个页面,而不仅仅是标题。非常正确;另请参阅我的另一个答案:@Stephan202,我用url尝试了托马斯的代码http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.6.tar.bz2,并使用vnstat-l查看我的网络流量。我找不到任何文件正在下载的迹象。你能解释一下你的主张吗?谢谢当你调用返回的对象上的readlines时,你会看到你的下载表开始滴答作响。也许有些操作系统缓冲区很快就填满了,因为你没有清空它,内核停止发送ACK,服务器停止发送数据?但是Thomas,你在回答中发布的代码没有使用读线。你相信上面的代码可以下载整个页面吗?我找不到任何证据。代码字段没有文档记录。您可能应该改用getcode。
>>> import urllib2
>>> url = urllib2.urlopen("http://www.google.com/index.html")
>>> url.getcode()
200
>>> import urllib.request
>>> url = urllib.request.urlopen("http://www.google.com/index.html")
>>> url.getcode()
200
import urllib2
res = urllib2.urlopen('http://google.com/index.html')
res.getCode() #contains code
>>> 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