Connection reset
导致“Connection reset”的原因是服务器端因为某种原因关闭了Connection,而客户端依然在读写数据,此时服务器会返回复位标志“RST”,“RST”标志表示我不再发送数据也不接收数据了,然后此时客户端就会提示“java.net.SocketException: Connection reset” 或者ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接.
Connection reset by peer
另一个比较常见的异常是“Connection reset by peer”,它和“Connection reset”的区别在于:
1.服务器返回了“RST”时,如果此时客户端正在从Socket套接字的输出流中读数据则会提示Connection reset”;
2.服务器返回了“RST”时,如果此时客户端正在往Socket套接字的输入流中写数据则会提示“Connection reset by peer”。
urllib3.exceptions.MaxRetryError
python中,大部分网络请求库是基于urllib3实现的,urllib3默认实现了Retry类,因为这个重试有局限性,只会重试特定的几个异常类型(dns解析错误,连接错误,连接超时错误),可以使用retries=False
关闭重试,然后自己实现重试功能,例如python语言可以使用 geeker包的 retry.
@retry(retry_times=3)
def request_token(self):
pass
SSLEOFError
ssl无法被正确验证时发生,暂无完美解决方案,python语言可以尝试以下方案
1.安装,更新相关库
pip install pyopenssl ndg-httpsclient pyasn1
pip install -U urllib3
pip install -U channels
pip install -U requests[security]
pip --cert /Users/user/cacert.pem install -U channels
2.代码层面
import ssl
import urllib3
ssl._create_default_https_context = ssl._create_unverified_context
pool_manager = urllib3.PoolManager(
cert_reqs=ssl.CERT_NONE,
**addition_pool_args)
3.关闭所有的代理或者连接时带上代理参数