有没有办法在不下载文件的情况下读取标题代码?

时间:2009-11-17 19:41:24

标签: python http header

 import httplib
 conn = httplib.HTTPConnection(head)
 conn.request("HEAD",tail)
 res = conn.getresponse()
 print res.status

我目前正在使用它来获取文件的HTTP头代码。 但是,似乎这段代码下载了该文件,然后获取代码。

但是,有些文件实际上是视频文件......我的程序下载它们效率很低。

有没有办法在不下载文件的情况下阅读标题代码?

4 个答案:

答案 0 :(得分:2)

不幸的是,HEAD HTTP Method和所有其他HTTP方法一样只是服务器的指令。 HTTP规范说服务器不能返回正文,但如果服务器没有正确实现或配置,那么它可能会返回URL的全部内容。

在这里可能还有其他一些因素可以解决您的终端或服务器端的代理服务器缓存内容(特别是如果它是视频)并从缓存中返回。由于数据来自缓存,因此可能缺少对HTTP规范的完全尊重。

答案 1 :(得分:1)

HTTP HEAD命令的目的是返回标头信息,与使用GET命令接收的信息相同,但没有响应主体(例如视频本身)。如果您发出HEAD命令并接收完整的响应,那听起来就像您要连接的服务器有问题。

答案 2 :(得分:0)

正如其他人所说的那样,如果使用HEAD命令获得的标题超过了标题,则目标服务器配置错误。

然而,问题的实用解决方案是简单地询问文件的前N个字节,然后将它们解析为标头。或者,流式连接,定期解析完整的标题,然后在获得所需的标题信息后取消下载。

答案 3 :(得分:0)

使用urllib2.open()并获取已为您解析的标头,以及准备好读取其余数据流的文件句柄。此时,您关闭文件,不再获取任何内容。

>>> import urllib2
>>> f = urllib2.urlopen("http://stackoverflow.com/")
>>> for k,v in f.headers.items():
...     print repr(k), "=", repr(v)
... 
'content-length' = '113782'
'expires' = 'Tue, 17 Nov 2009 22:12:33 GMT'
'server' = 'Microsoft-IIS/7.0'
'connection' = 'close'
'cache-control' = 'private'
'date' = 'Tue, 17 Nov 2009 22:12:33 GMT'
'content-type' = 'text/html; charset=utf-8'
>>> f.read(20)
'\r\n\r\n<!DOCTYPE HTML P'
>>> 

此处没有理由生成HEAD请求。