不确定是否可能,但我想检查HTTP请求的状态码,而不必下载一个大文件; 我只想检查它是否在服务器上存在。
使用Python的requests
,是否可以实现这一点? 我已经知道如何检查状态码,但只能在文件下载完成后才能进行。
我想问的是是否可以发出GET请求,并在接收到响应头后立即停止?
不确定是否可能,但我想检查HTTP请求的状态码,而不必下载一个大文件; 我只想检查它是否在服务器上存在。
使用Python的requests
,是否可以实现这一点? 我已经知道如何检查状态码,但只能在文件下载完成后才能进行。
我想问的是是否可以发出GET请求,并在接收到响应头后立即停止?
使用requests.head()
方法。这个方法只返回请求的头部信息,而不是所有内容 - 换句话说,它不会返回消息的正文部分,但你可以从头部获取所有的信息。
HEAD方法与GET方法相同,除了服务器不能在响应中返回消息正文。对于HEAD请求,HTTP头中包含的元信息应该与对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'}
这段代码不会下载图片,而是返回图片信息头,其中包含大小、类型和日期等信息。如果图片不存在,则不会有这样的信息。
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'])
urllib.request.urlopen
下载整个文件。 - tejasvi88通常情况下,你应该使用HEAD方法而不是GET方法来处理这种类型的事情。如果你查询网络上的某个随机服务器,则要准备好它可能配置为返回不一致的结果(这对于需要注册的服务器很典型)。在这种情况下,您可能希望使用GET请求,并使用范围头来仅下载少量字节。
ssh
命令来检查 SSH 服务器上文件的存在性... 虽然情况不同但还是谢谢。 - Juicy