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