我在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我无法禁用防火墙:公司政策。我同意你的看法,这可能是原因。是否可以打开另一个连接?还是即使脚本崩溃也要强制关闭?
答案 0 :(得分:0)
我回答了我自己的问题:
我的情况是防火墙问题。由于公司政策原因,我无法修改其参数,但是使用没有防火墙的计算机,它可以工作。这不是SW解决方案,而是一种昂贵的解决方法,但是总比没有好。