在我使用的配置中,一个小型服务器托管文件,只接受GET请求,不接受HEAD请求。我需要头信息来检查文件类型,以避免获取整个文件。我通常会使用requests.head(url)来执行此操作,但正如我前面提到的,只允许使用GET方法。在curl中,可以执行以下操作:curl -I -X GET http://domain.dom/path/个它会 curl url的头,但是会用GET HTTP方法覆盖used方法。
requests.head(url)
curl -I -X GET http://domain.dom/path/
qij5mzcb1#
不幸的是,似乎没有一个干净的方法来实现这一点。如果服务器接受Range头,你可以尝试请求从0到0的字节,这样你就可以访问头数据,而不是主体。例如
Range
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
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的字节范围会跳过正文,你会免费得到标题。
2条答案
按热度按时间qij5mzcb1#
不幸的是,似乎没有一个干净的方法来实现这一点。如果服务器接受
Range
头,你可以尝试请求从0到0的字节,这样你就可以访问头数据,而不是主体。例如如前所述,这仍然取决于服务器实现。https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Range
csga3l582#
根据GET的定义,您似乎可以修改请求头以包含范围请求。
我还没有尝试过这个,但是也许设置一个0-1的字节范围会跳过正文,你会免费得到标题。