重新启动脚本后现有连接错误

时间:2019-01-11 10:34:45

标签: python python-3.x

我在Python 3.7上执行HTTP请求,但是如果在执行过程中出现一些错误并且脚本停止运行,则所有新的HTTP请求(即使在重新启动脚本之后)也会出现错误:[Errno 10054] An existing connection was forcibly closed by the remote host

我必须禁用/启用我的网络,以消除该错误。可能是由于我的PC / OS所致,因为该脚本可在RaspberryPi上运行,但不能在Windows 10上运行。但是我不知道如何解决该问题。

以下是生成错误的最小代码:

import requests
import json
import urllib.request
import socket

    if __name__ == '__main__':

        params = json.dumps({"toto": "ABCD"}).encode('utf-8')

        try:
            head = {'content-type': 'application/json'}
            #replace http by https, to generate the error, re-writte http, and it will never work again
            url = 'http://www.google.com'
            with requests.post(url, data=params, headers=head) as response:
                print("All is OK: " + str(response))
        except (urllib.error.URLError, socket.timeout) as e:
            print("Error time out: " + str(e.args))
        except Exception as e:
            print("Uknown error: " + str(e.args))

一旦出现错误,如果我要安装新模块,即使 pip.exe 也会返回相同的错误。

edit1:我尝试了其他方法:

我还有另一个只执行SQL请求的脚本,它运行良好。

但是一旦出现错误,即使这个也有问题: "Lost connection to MySQL server during query (%s)" % (e,)) pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query ([WinError 10054] An existing connection was forcibly closed by the remote host)')

edit2:我在Windows的Ubuntu上安装了 bash ,并且在同一台PC上执行相同的操作,但操作系统不同,我得到ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',))

我在其他PC(Windows 7)上尝试过,与我的问题相同。

@djvg我检查了openSSL版本(1.1.0i)和TSL版本(1.2),因此它看起来与您提供的link兼容。这是点冻结的输出(感谢提示,我不知道顺便说一句):

  

certifi == 2018.11.29 chardet == 3.0.4 cycler == 0.10.0 idna == 2.8   kiwisolver == 1.0.1 matplotlib == 3.0.2 numpy == 1.15.4 PyMySQL == 0.9.3   pyparsing == 2.3.0 python-dateutil == 2.7.5请求== 2.21.0六个== 1.12.0   urllib3 == 1.24.1

@ M.Spiller我不使用“特殊网络”,如果我在我的专业网络上进行测试,则无法使用,但是会出现另一个错误(可能是代理问题),因此我使用了没有特定安全性的另一个网络。但是我不认为这是一个安全问题,因为一旦脚本停止,就会出现此错误。该脚本在树莓派上运行良好。可能是操作系统问题吗?就像网络板第一次没有正确关闭连接一样。但我不知道如何验证...

@UserX我无法禁用防火墙:公司政策。我同意你的看法,这可能是原因。是否可以打开另一个连接?还是即使脚本崩溃也要强制关闭?

1 个答案:

答案 0 :(得分:0)

我回答了我自己的问题:

我的情况是防火墙问题。由于公司政策原因,我无法修改其参数,但是使用没有防火墙的计算机,它可以工作。这不是SW解决方案,而是一种昂贵的解决方法,但是总比没有好。