脚本重启后存在连接错误
Posted
技术标签:
【中文标题】脚本重启后存在连接错误【英文标题】:Existing connection error after script restart 【发布时间】:2019-06-06 06:30:53 【问题描述】:我在 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',))
我在其他电脑(Windows 7)上试过,和我的问题一样。
@djvg 我检查了 openSSL 版本 (1.1.0i) 和 TSL 版本 (1.2),所以它看起来与您提供的 link 兼容。这是 pip freeze 的输出(感谢提示,顺便说一句我不知道):
certifi==2018.11.29 chardet==3.0.4 循环仪==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 requests==2.21.0 六==1.12.0 urllib3==1.24.1
@M.Spiller 我不使用“特殊网络”,如果我在我的专业网络上进行测试,它不起作用但出现另一个错误(可能是代理问题),所以我使用另一个没有特别安全性的网络.但我认为这不是安全问题,因为一旦脚本停止就会出现此错误。该脚本在树莓派上运行良好。可能是操作系统问题?就像网络板第一次没有正确关闭连接一样。但我不知道如何验证...
@UserX 我无法禁用防火墙:公司政治。我同意你的观点,这可能是原因。是否可以打开另一个连接?还是在脚本崩溃时强制关闭?
【问题讨论】:
不幸的是它对我有用(Ubuntu Bionic),所以我恐怕帮不了你,但只是作为美丽请求库的旁注 - 从 2.4.2 开始,你可以使用requests.post(url, json="toto": "ABCD")
和它会处理其他所有事情。
可能是原始套接字?
我无法重现您的问题,您使用什么版本的请求库?也许标题中的“连接”参数会有所帮助:head = 'content-type': 'application/json', 'Connection':'close'
您是否尝试禁用防火墙?
尝试使用 Python 2.7, 3.5, 3.6、3.7 on Win 10(每次至少 5 次),以及每次我得到“一切正常:我回答我自己的问题:
就我而言这是防火墙问题。由于公司政策,我无法修改其参数,但使用没有防火墙的计算机可以正常工作。这不是一个软件解决方案,它是一种昂贵的解决方法,但总比没有好。
【讨论】:
以上是关于脚本重启后存在连接错误的主要内容,如果未能解决你的问题,请参考以下文章