网络请求中的错误

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.关闭所有的代理或者连接时带上代理参数

posted @ 2021-06-10 11:51  rm-rf*  阅读(423)  评论(0编辑  收藏  举报