【问题标题】:Python error: Connection aborted - Network is downPython 错误:连接中止 - 网络已关闭
【发布时间】:2017-05-24 06:16:37
【问题描述】:

我正在使用 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。

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

【问题讨论】:

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


    【解决方案1】:

    您的错误日志显示:

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

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

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

    【讨论】:

    • 我正在使用 Python 中的 requests 库中的 Retry 类来重试 ConnectionError,所以我很惊讶我仍然得到它。我想我会编写自己的重试类,然后增加最大重试阈值。
    猜你喜欢
    • 2021-12-10
    • 2018-07-11
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2011-04-10
    • 1970-01-01
    相关资源
    最近更新 更多