Python 如何判断服务器是否支持部分内容?
我正在开发自己的多线程web下载程序。在开始之前,我搜索了相同的问题,但文章告诉我,如果服务器支持部分内容,他们可以接受请求头Python 如何判断服务器是否支持部分内容?,python,http-headers,python-requests,Python,Http Headers,Python Requests,我正在开发自己的多线程web下载程序。在开始之前,我搜索了相同的问题,但文章告诉我,如果服务器支持部分内容,他们可以接受请求头Range:bytes=a-b并返回206响应代码。根据这个规则,这里是我的代码 # Occur HEAD request and get more information def _get_url_header(self): interface.info_out('HEAD_REQUEST') headers = { 'Range': '
Range:bytes=a-b
并返回206
响应代码。根据这个规则,这里是我的代码
# Occur HEAD request and get more information
def _get_url_header(self):
interface.info_out('HEAD_REQUEST')
headers = {
'Range': 'bytes=0-1'
}
response = requests.head(self.url, stream = True, headers = headers)
print(response.status_code)
# This if statement need modify!!!
if response.status_code == 206:
self.partital_content = True
interface.info_out('PARTITAL_SUPPORT')
elif response.status_code // 100 == 4:
interface.info_out('CONNECTION_ERROR', response.status_code)
elif response.status_code // 100 == 2:
self.partital_content = False
interface.info_out('PARTITAL_NOT_SUPPORT')
但是当我测试我的代码时,我意外地发现,虽然我得到了200
code,但服务器仍然接受我的Range
头,换句话说,服务器仍然支持部分内容传输!
那么出了什么问题?如何判断服务器是否支持部分内容?接受(或至少不拒绝)
范围
标题并不一定意味着它们支持部分内容传输。如果您没有获得206,服务器不支持它,可能只是忽略了它无法处理的头。@jornsharpe但当我测试代码时,使用200 respond的多线程输出文件的md5sum与单线程相同。这真是一件奇怪的事情,可以解释吗?@jornsharpe我发现检查内容范围是否在响应标题中是一个好主意。接受(或至少不拒绝)范围标题并不一定意味着它们支持部分内容传输。如果您没有获得206,服务器不支持它,可能只是忽略了它无法处理的头。@jornsharpe但当我测试代码时,使用200 respond的多线程输出文件的md5sum与单线程相同。这真是一件奇怪的事情,可以解释吗?@jornsharpe我发现检查内容范围是否在响应标题中是一个好主意。