我正在使用某个网站提供的应用程序定期从网站上收集一些数据,比如每次30秒。 然后将返回的响应记录在数据库中。
我通过导入请求和写代码来使用模块化来捕获异常。 主要功能的代码如下:
def get_response(self):
try:
response = requests.get(self.request_url)
if response.status_code == 200:
return response.json()
except Exception as e:
msg = "Exception is:\n %s \n" % e
print msg
上述功能在前几个小时内运行良好。
该函数还可以从一些例外中恢复,例如:
('连接中止。',BadStatusLine(“''”,))
要么
('连接已中止。',错误(10053,''))
它省略了异常(通过在数据库中记录Null)并继续获得下一个周期的响应。
但是,当包含10054错误时,该功能停止工作。
Exception is:
('Connection aborted.', error(10054, ''))
我检查数据库,发现在10054错误发生之后所有响应都是空的。 我首先猜测网站可能会崩溃,因此没有收到回复。 但是当我手动重启该功能时,它会再次开始响应。 所以这与网站的细分无关。
我在stackoverflow中搜索并找到:Errno 10054远程主机强行关闭现有连接。 但我不知道如何解决它。
请问你能解决一下这个问题吗?(理想情况下) 或者提供一些解决方案来重启功能而无需手动重启? (看起来,一旦我重新启动功能,它就会再次运行。)
提前致谢。
答案 0 :(得分:9)
网络服务器主动拒绝您的连接。这通常是因为它拥挤,速率限制或认为您正在发起拒绝服务攻击。如果你从服务器得到这个,你应该再睡一会儿再试一次。事实上,如果您在重试之前没有睡觉,那么您就是拒绝服务攻击。礼貌的事情是实施渐进式睡眠,比如(1,2,4,8,16,32)秒。
答案 1 :(得分:0)
你可以试试。它解决了我的 ConnectionResetError 10054 问题。
session = requests.Session()
session.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.1.2222.33 Safari/537.36",
"Accept-Encoding": "*",
"Connection": "keep-alive"
}
response = session.get(self.request_url)