Python错误:连接中止 - 网络已关闭

时间:2017-01-09 21:30:06

标签: python http gmail python-requests gmail-api

我正在使用Gmail API来提取用户收件箱中的所有电子邮件。一切正常,直到大约一个小时,当请求停止返回带有消息的响应时。

我使用此代码来请求邮件标题:

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 个答案:

答案 0 :(得分:1)

您的错误日志显示:

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

&#39;网络已关闭&#39;可能与不稳定的互联网连接有关。

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