curl 是否可以使用requests.get命令只获取头部而不获取主体?服务器正在阻塞HEAD

e5nqia27  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(165)

在我使用的配置中,一个小型服务器托管文件,只接受GET请求,不接受HEAD请求。我需要头信息来检查文件类型,以避免获取整个文件。
我通常会使用requests.head(url)来执行此操作,但正如我前面提到的,只允许使用GET方法。
在curl中,可以执行以下操作:
curl -I -X GET http://domain.dom/path/
它会 curl url的头,但是会用GET HTTP方法覆盖used方法。

qij5mzcb

qij5mzcb1#

不幸的是,似乎没有一个干净的方法来实现这一点。如果服务器接受Range头,你可以尝试请求从0到0的字节,这样你就可以访问头数据,而不是主体。例如

import requests   

url = "http://stackoverflow.com"
headers = {"Range": "bytes=0-0"}
res = requests.get(url, headers=headers)

print(res.headers)

如前所述,这仍然取决于服务器实现。https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Range

csga3l58

csga3l582#

根据GET的定义,您似乎可以修改请求头以包含范围请求。

A client can alter the semantics of GET to be a "range request", requesting transfer of only some part(s) of the selected representation, by sending a Range header field in the request (Section 14.2).

我还没有尝试过这个,但是也许设置一个0-1的字节范围会跳过正文,你会免费得到标题。

相关问题