Requests报”requests.exceptions.ChunkedEncodingError: (“Connection broken: {error message}”, ConnectionResetError(104, ‘Connection reset by peer’)) “的原因以及解决办法

  • Post category:Python

问题原因:

错误信息”requests.exceptions.ChunkedEncodingError: (“Connection broken: {error message}”, ConnectionResetError(104, ‘Connection reset by peer’))”表示在传输数据时连接出现问题,可能是由于对方主机或本地网络故障导致连接不稳定。在 HTTP 协议传输数据时,请求和响应的流程可以分为发送请求、接收请求、响应请求、接收响应四个阶段,如果某个阶段出现异常或错误,都很可能导致请求或响应中断,引发上述错误。

解决办法:

  1. 重连

可以使用 retry 去尝试多次请求,直到成功或者达到最大重试次数的结果。可以使用 retrying 库或手动捕获异常来实现重连。

  1. 设定请求头

为了避免被对方服务器误认为是攻击或非法请求,更换请求头,模拟人类操作,以减少被封禁IP的可能性。

  1. 减小请求量

减少请求数量,尤其是当爬取的网站存在反爬虫机制时,尽量遵守对方网站的 robots 协议,减小对方服务器的压力,可以有效减小连接中断出现的概率。

  1. 增加请求间隔

增加两次请求间的间隔时间,可以减小请求过于频繁导致的连接中断。使用 time 库的 sleep 函数可以方便地增加请求间隔时间。

  1. 更换代理ip

如果已经使用了上面几个方法还是不能解决问题,那么问题就可能是被封 IP 了。此时,需要更换代理 IP 地址,避免使用自己的 IP 连接服务器被封禁的情况。

以上就是解决 “requests.exceptions.ChunkedEncodingError: (“Connection broken: {error message}”, ConnectionResetError(104, ‘Connection reset by peer’)) ” 错误的完整攻略。