- 原因:
在进行网络请求时,包含请求和响应过程。而在传输响应数据的过程中,对于大文件,服务器会对其进行分块传输,你的程序会以分块的形式获取响应数据。当传输中出现异常情况,如服务端异常断开连接时,会抛出ChunkedEncodingError
异常,该异常表明分块编码中出现错误。
- 解决办法:
2.1 增加一些请求头参数,意义参考下面的具体代码示例;
2.2 加大requests.request()函数的timeout参数的值,较小的timeout参数在网络延迟较高等情况下容易出现运行报错异常;
2.3 尝试设置请求头的Content-Length参数,让程序可以预测服务器的请求大小,减少错误拦截的可能。
下面,是一个完整的请求示例。这个示例在请求时指定了请求头,增加了Connection
、User-Agent
和Accept-Encoding
,通过设置 Content-Length
让程序可以预测服务器发送的数据大小。并且将请求函数的超时时间设置为15秒,防止网络响应延迟造成程序异常退出。
import requests
headers = {
'Connection': 'keep-alive',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
'Accept-Encoding': 'gzip, deflate, br',
'Content-Length': '0'
}
try:
response = requests.get(url, headers=headers, timeout=15)
except requests.exceptions.ChunkedEncodingError as e:
print(e)
经过以上处理之后,可以有效避免 ChunkedEncodingError 错误,并且增加了程序的健壮性和稳定性。