url 超过最大重试次数:Amazon mws

时间:2021-07-02 07:49:10

标签: python http ssl amazon-mws

我发现了与此类似的问题,但没有一个是完全相同的,并且所有给定的解决方案都无法解决该问题,所以我写了这个,希望能找到一些帮助。

因此,我将 amazon mws 库与 Python 一起使用,并且我正在使用以下链接中的 Reports API: https://docs.developer.amazonservices.com/en_US/reports/Reports_Overview.html

应用程序遍历 6 个 mws.Reports 对象,并为每个 mws.Reports 对象请求 4 种报告类型。

mws.Reports 对象定义为:

    mws.Reports(
        access_key="access_key",
        secret_key="secret_key",
        account_id="account_id"
    )

请求的报告是:

  • -GET_FLAT_FILE_ALL_ORDERS_DATA_BY_LAST_UPDATE

  • -GET_FBA_FULFILLMENT_CUSTOMER_RETURNS_DATA

  • -GET_FBA_FULFILLMENT_CURRENT_INVENTORY_DATA

  • -GET_FBA_MYI_UNSUPPRESSED_INVENTORY_DATA

因此,对于每个 mws.Reports 对象,我都使用以下逻辑请求每个报告:

response = mws.Reports.request_report(
        report_type=report_type,
        start_date=datetime.timedelta(days=30),
        end_date=datetime.date.today()
    )

此操作创建一个报告请求 ID,其中包含我进一步获取报告状态和报告本身的信息。因此,应用程序遍历 6 个 mws.Reports 对象并请求每个提到的 report_types。并且在每次请求之后,在下一次请求之前都有 15 秒的休眠时间。

该问题在执行 mws.Reports.request_report 操作时出现在中途,并且几乎总是在不同的时间和请求不同的报告时发生 这是来自一个此类错误的完整错误日志:

Task 'load': Exception encountered during task execution!
Traceback (most recent call last):
  File "/opt/etl_old/.venv/lib/python3.8/site-packages/urllib3/connectionpool.py", line 699, in urlopen
    httplib_response = self._make_request(
  File "/opt/etl_old/.venv/lib/python3.8/site-packages/urllib3/connectionpool.py", line 382, in _make_request
    self._validate_conn(conn)
  File "/opt/etl_old/.venv/lib/python3.8/site-packages/urllib3/connectionpool.py", line 1010, in _validate_conn
    conn.connect()
  File "/opt/etl_old/.venv/lib/python3.8/site-packages/urllib3/connection.py", line 411, in connect
    self.sock = ssl_wrap_socket(
  File "/opt/etl_old/.venv/lib/python3.8/site-packages/urllib3/util/ssl_.py", line 449, in ssl_wrap_socket
    ssl_sock = _ssl_wrap_socket_impl(
  File "/opt/etl_old/.venv/lib/python3.8/site-packages/urllib3/util/ssl_.py", line 493, in _ssl_wrap_socket_impl
    return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
  File "/home/etl_old/.pyenv/versions/3.8.7/lib/python3.8/ssl.py", line 500, in wrap_socket
    return self.sslsocket_class._create(
  File "/home/etl_old/.pyenv/versions/3.8.7/lib/python3.8/ssl.py", line 1040, in _create
    self.do_handshake()
  File "/home/etl_old/.pyenv/versions/3.8.7/lib/python3.8/ssl.py", line 1309, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:1125)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/etl_old/.venv/lib/python3.8/site-packages/requests/adapters.py", line 439, in send
    resp = conn.urlopen(
  File "/opt/etl_old/.venv/lib/python3.8/site-packages/urllib3/connectionpool.py", line 755, in urlopen
    retries = retries.increment(
  File "/opt/etl_old/.venv/lib/python3.8/site-packages/urllib3/util/retry.py", line 574, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='mws-eu.amazonservices.com', port=443): Max retries exceeded with url: /?AWSAccessKeyId="access_key"&Action=RequestReport&EndDate=2021-06-30T23%3A59%3A59&MarketplaceIdList.Id.1=APJ6JRA9NG5V4&Merchant="merchant"&ReportType=_GET_FBA_MYI_UNSUPPRESSED_INVENTORY_DATA_&SignatureMethod=HmacSHA256&SignatureVersion=2&StartDate=2021-06-01T00%3A00%3A00&Timestamp=2021-07-01T15%3A56%3A59&Version=2009-01-01&Signature=hVMyqRl/Mnrd/wqh5IaOqnNMQ3WJK7itNBj9apE64Kw%3D (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1125)')))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/etl_old/amazon/etl/amazon_seller_central_sellout.py", line 417, in load
    report_request_id = get_report_request_id(report_object[1], report, marketplace_id)
  File "/opt/etl_old/amazon/etl/amazon_seller_central_sellout.py", line 124, in get_report_request_id
    response = mws_object.request_report(
  File "/opt/etl_old/.venv/lib/python3.8/site-packages/mws/mws.py", line 645, in request_report
    return self.make_request(data)
  File "/opt/etl_old/.venv/lib/python3.8/site-packages/mws/mws.py", line 249, in make_request
    response = request(
  File "/opt/etl_old/.venv/lib/python3.8/site-packages/requests/api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "/opt/etl_old/.venv/lib/python3.8/site-packages/requests/sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "/opt/etl_old/.venv/lib/python3.8/site-packages/requests/sessions.py", line 655, in send
    r = adapter.send(request, **kwargs)
  File "/opt/etl_old/.venv/lib/python3.8/site-packages/requests/adapters.py", line 514, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='mws-eu.amazonservices.com', port=443): Max retries exceeded with url: /?AWSAccessKeyId="access_key"&Action=RequestReport&EndDate=2021-06-30T23%3A59%3A59&MarketplaceIdList.Id.1=APJ6JRA9NG5V4&Merchant="merchant"&ReportType=_GET_FBA_MYI_UNSUPPRESSED_INVENTORY_DATA_&SignatureMethod=HmacSHA256&SignatureVersion=2&StartDate=2021-06-01T00%3A00%3A00&Timestamp=2021-07-01T15%3A56%3A59&Version=2009-01-01&Signature=hVMyqRl/Mnrd/wqh5IaOqnNMQ3WJK7itNBj9apE64Kw%3D (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1125)')))

该错误最奇怪的是,它是在应用程序在服务器上成功运行大约一年半后最近才开始发生的。更奇怪的是,这个错误只发生在运行应用程序的 ETL 服务器上,而当从计算机本地运行时,一切顺利,没有问题。我的本地计算机和服务器的环境是相同的,安装了相同的包和依赖项,所以我无法弄清楚这里可能是什么问题。

有什么想法吗?

提前致谢,

马尔科·希贝尼克

0 个答案:

没有答案
相关问题