不确定这是否可行,但我想在不下载的情况下检查对大文件的HTTP请求的状态代码;我只是想检查它是否存在于服务器上。
是否可以使用Python requests
执行此操作?我已经知道如何检查状态代码,但我只能在下载文件后才这样做。
我想我要问的是,您是否可以发出GET请求并在收到响应标头后立即将其停止?
答案 0 :(得分:5)
使用requests.head()
,这只返回请求的标头,而不是所有内容,换句话说,它不会租用邮件正文,但是你可以从标题中获取所有信息。
HEAD方法与GET相同,只是服务器不能 在响应中返回一个消息体。元信息包含 在HTTP头中响应HEAD请求应该是相同的 响应GET请求发送的信息。 这种方法可以 用于获取有关该隐含的实体的元信息 请求而不转移实体主体本身。这个方法是 经常用于测试超文本链接的有效性,可访问性, 和最近的修改。
例如:
import requests
url = 'http://lmsotfy.com/so.png'
r = requests.head(url)
r.headers
出:
{'Content-Type': 'image/png', 'Content-Length': '6347', 'ETag': '"18cb-4f7c2f94011da"', 'Accept-Ranges': 'bytes', 'Date': 'Mon, 09 Jan 2017 11:23:53 GMT', 'Last-Modified': 'Thu, 24 Apr 2014 05:18:04 GMT', 'Server': 'Apache', 'Keep-Alive': 'timeout=2, max=100', 'Connection': 'Keep-Alive'}
此代码不下载图片,但返回图片信息的标题,其中包含大小,类型,日期。如果图片不存在,就没有这样的信息。
答案 1 :(得分:0)
通常,您可以使用HEAD方法代替GET进行此类操作。如果您在Web上查询某个随机服务器,那么请准备好它可以配置为返回不一致的结果(这对于需要注册的服务器来说是典型的)。在这种情况下,您可能希望使用Range header的GET请求来下载少量字节。
答案 2 :(得分:0)
使用HEAD
方法。
例如urllib
import urllib.request
response = urllib.request.urlopen(url)
if response.getcode() == 200:
print(response.headers['content-length'])
在requests
import requests
response = requests.head(url)
if response.status_code == 200:
print(response.headers['content-length'])