2017-01-09 51 views
0

我正在使用Gmail API来拉取用户收件箱中的所有电子邮件。一切工作正常,直到大约一个小时,当请求停止返回消息响应。Python错误:连接中止 - 网络已关闭

我使用此代码,请求消息头:

sess = requests.Session() 
retries = Retry(total=5, connect=10, backoff_factor=0.1, status_forcelist=[401, 500, 502, 503, 504], raise_on_redirect=True, raise_on_status=True) 
sess.mount('https://', HTTPAdapter(max_retries=retries)) 

try: 
      msg = json.loads(sess.get(message_url, params={'format': 'metadata'}, headers=authorization_header).text) 
      logger.info('msg', dict(msg=msg)) 

except requests.HTTPError as e: 
      logger.info('error', dict(
       error=e, 
       error_code=e.code 
      )) 

except: 
      logger.info('Unknown error') 

一个小时后,我会得到像这样的错误:

[2017-01-08 16:34:17,536: WARNING/PoolWorker-1] 
Retrying (Retry(total=4, connect=10, read=None, redirect=None)) 
after connection broken by 'ProtocolError('Connection aborted.', 
OSError(50, 'Network is down'))': 
/gmail/v1/users/<user_id>/messages/<message_id>?format=metadata 

我想我可能会运行到这个问题,因为访问令牌到期,所以我编写了一个脚本来使用刷新令牌来获取新的访问令牌。该过程也从不捕获HTTPError,而是打印“未知错误”,所以我不认为HTTPError会是这种情况。

您对如何解决此问题有任何想法吗?

回答

1

你的错误日志说:

connection broken by 'ProtocolError('Connection aborted.', OSError(50, 'Network is down'))': 

“网络已关闭”可能是与互联网连接不稳定。

另一个可能的原因是您使用了错误的URL。在这个SO thread中,连接可能是http而不是https,反之亦然。

+1

我使用Python中的请求库中的Retry类来重试ConnectionError,所以我很惊讶我仍然得到这个。 我想我会写我自己的重试类,然后增加最大重试阈值。 – Aspen

相关问题