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

6 投票
3 回答
5381 浏览
提问于 2025-04-15 15:59
>>> 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”这样。

撰写回答