我正在使用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。
您对如何处理此问题有任何想法吗?
答案 0 :(得分:1)
您的错误日志显示:
connection broken by 'ProtocolError('Connection aborted.', OSError(50, 'Network is down'))':
&#39;网络已关闭&#39;可能与不稳定的互联网连接有关。
另一个可能的原因是您使用了错误的网址。在此SO thread中,连接可能是http而不是https,反之亦然。