如何在不下载对象的情况下检查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
我觉得你的代码已经在做这个了。你从来没有在响应上调用 read() 方法,所以你实际上并没有下载文件的内容。
更好的是……你可以使用 httplib 发送一个 HTTP HEAD 请求,而不是像你现在的 urllib 代码那样做 HTTP GET 请求。
1
是的,它会获取文件。
我觉得你真正想做的是发送一个HTTP HEAD请求(这个请求其实是问服务器要的不是数据本身,而只是一些头信息)。你可以在这里查看相关内容。
18
你想告诉服务器不要发送文件的全部内容。HTTP有一个叫“HEAD”的机制,可以作为“GET”的替代方案。它的工作方式和“GET”一样,但服务器只会发送给你一些头信息,而不会发送实际的内容。
这样可以节省你们的带宽,而如果你只是不执行read(),那只是不会去获取完整的文件。
试试这个:
import httplib
c = httplib.HTTPConnection(<hostname>)
c.request("HEAD", <url>)
print c.getresponse().status
状态码会被打印出来。URL应该只是一部分,比如“/foo”,而主机名应该像“www.example.com”这样。