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

Python 有没有办法在不下载文件的情况下读取头代码?,python,http,header,Python,Http,Header,我目前正在使用它来获取文件的HTTP头代码。 然而,这段代码似乎下载了文件,然后获取了代码 然而,有些文件实际上是视频文件…如果我的程序下载它们,效率会很低 有没有办法在不下载文件的情况下读取标题代码?HTTPHEAD命令的目的是返回标题信息,与使用GET命令接收的信息相同,但没有响应主体(例如视频本身)。如果您正在发出HEAD命令并接收全部响应,那么您所连接的服务器似乎有问题。HTTPHEAD命令的目的是返回标头信息,与使用GET命令接收的信息相同,但是没有响应主体(例如视频本身)。如果您发出

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

然而,有些文件实际上是视频文件…如果我的程序下载它们,效率会很低


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

HTTP
HEAD
命令的目的是返回标题信息,与使用
GET
命令接收的信息相同,但没有响应主体(例如视频本身)。如果您正在发出
HEAD
命令并接收全部响应,那么您所连接的服务器似乎有问题。

HTTP
HEAD
命令的目的是返回标头信息,与使用
GET
命令接收的信息相同,但是没有响应主体(例如视频本身)。如果您发出
HEAD
命令并接收全部响应,那么您所连接的服务器似乎有问题。

不幸的是,与所有其他HTTP方法一样,它只是对服务器的一个指令。HTTP规范规定,服务器在这种情况下不得返回正文,但如果服务器未正确实现或配置,则可能返回URL的全部内容

这里可能还有其他因素,您或服务器端的代理服务器可能正在缓存内容(特别是因为它是视频)并从缓存中返回。由于数据来自缓存,HTTP规范的全部内容可能会丢失。

不幸的是,与所有其他HTTP方法一样,HTTP方法只是对服务器的一个指令。HTTP规范规定,服务器在这种情况下不得返回正文,但如果服务器未正确实现或配置,则可能返回URL的全部内容


这里可能还有其他因素,您或服务器端的代理服务器可能正在缓存内容(特别是因为它是视频)并从缓存中返回。由于数据来自缓存,因此可能缺少HTTP规范的完整方面。

正如其他人所说,如果使用
HEAD
命令返回的头数超过头数,则目标服务器配置错误


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

正如其他人所说,如果使用
HEAD
命令返回的头数超过头数,则目标服务器配置错误

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

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

 import httplib
 conn = httplib.HTTPConnection(head)
 conn.request("HEAD",tail)
 res = conn.getresponse()
 print res.status
导入urllib2 >>>f=urllib2.urlopen(“http://stackoverflow.com/") >>>对于f.headers.items()中的k,v: ... 打印报告(k),“=”,报告(v) ... “内容长度”=“113782” “expires”=“2009年11月17日星期二22:12:33 GMT” “服务器”=“Microsoft IIS/7.0” “连接”=“关闭” “缓存控制”=“专用” “日期”=“2009年11月17日星期二22:12:33 GMT” '内容类型'='文本/html;字符集=utf-8' >>>f.read(20) '\r\n\r\n使用urllib2.open()并获取已为您解析的头文件,以及准备读取数据流其余部分的文件句柄。此时,您将关闭文件,不再获取任何内容

 import httplib
 conn = httplib.HTTPConnection(head)
 conn.request("HEAD",tail)
 res = conn.getresponse()
 print res.status
导入urllib2 >>>f=urllib2.urlopen(“http://stackoverflow.com/") >>>对于f.headers.items()中的k,v: ... 打印报告(k),“=”,报告(v) ... “内容长度”=“113782” “expires”=“2009年11月17日星期二22:12:33 GMT” “服务器”=“Microsoft IIS/7.0” “连接”=“关闭” “缓存控制”=“专用” “日期”=“2009年11月17日星期二22:12:33 GMT” '内容类型'='文本/html;字符集=utf-8' >>>f.read(20)
'\r\n\r\n这取决于另一端的服务器的性能……嗯。。如果你从服务器请求一个文件,你首先要建立一个连接,然后你需要一些资源,这就是视频文件。因此,您下载它,最后您的http库将返回头文件。我就是这么想的think@streetparade当前位置你可能是这么想的,但这是错的。
HEAD
命令的全部目的是告诉服务器您只需要HTTP头,而不需要响应体。getresponse()不会执行您所说的操作。你认为它为什么要下载整个文件?您应该有一个HTTPResponse实例,它可以读取HTTP响应的主体。这取决于另一端的服务器表现如何……嗯。。如果你从服务器请求一个文件,你首先要建立一个连接,然后你需要一些资源,这就是视频文件。因此,您下载它,最后您的http库将返回头文件。我就是这么想的think@streetparade当前位置你可能是这么想的,但这是错的。
HEAD
命令的全部目的是告诉服务器您只需要HTTP头,而不需要响应体。getresponse()不会执行您所说的操作。你认为它为什么要下载整个文件?您应该有一个HTTPResponse实例,它可以读取HTTP响应的主体。