如何在不下载的情况下检查对象的HTTP状态代码?

时间:2009-11-13 19:22:31

标签: python http

>>> a=urllib.urlopen('http://www.domain.com/bigvideo.avi')
>>> a.getcode()
404
>>> a=urllib.urlopen('http://www.google.com/')
>>> a.getcode()
200

我的问题是... bigvideo.avi是500MB。我的脚本是否首先下载文件,然后检查它?或者,它可以立即检查错误代码而不保存文件吗?

3 个答案:

答案 0 :(得分:16)

您希望实际告诉服务器发送文件的完整内容。 HTTP有一种称为“HEAD”的机制,它是“GET”的替代品。它的工作方式相同,但服务器只向您发送标题,而不是实际内容。

这样可以节省至少一个带宽,而只是不进行读取()只会打扰获取整个文件。

试试这个:

import httplib
c = httplib.HTTPConnection(<hostname>)
c.request("HEAD", <url>)
print c.getresponse().status

将打印状态代码。网址应该只是一个细分受众群,例如“/ foo”,主机名应该像“www.example.com”。

答案 1 :(得分:1)

是的,它会获取文件。

我认为你真正想做的是发送一个HTTP HEAD请求(它基本上要求服务器不是数据本身,而是仅用于头部)。你可以看here

答案 2 :(得分:0)

我认为您的代码已经这样做了。 你永远不会在响应上调用read()方法,所以你永远不会真正下载文件的内容。

更好......你可以使用httplib发送HTTP HEAD请求,而不是执行你的urllib代码所做的HTTP GET。