【发布时间】:2018-07-10 12:57:51
【问题描述】:
tl;博士
为什么亚马逊对我的 API 调用的响应中总是省略 x-mws-quota-max、x-mws-quota-remaining 和 x-mws-quota-resetsOn 标头?
我们在订单导入器中收到请求限制异常,我似乎无法弄清楚为什么,或者至少为什么我们看不到任何限制标头。
我们请求 MWS 订单 API。首先,我们使用ListOrders 操作列出订单,然后对于每个订单,我们通过ListOrderItems 操作获取项目详细信息,然后我们在内部将其用于库存和报告等内容。我们使用 Marketplace Web 服务订单 PHP SDK (@version 2013-09-01) 来执行此操作,并在每天每 15 分钟运行一次的 cron 作业上运行它,每个请求都将其拉取的订单范围限制为仅检索自上次以来的订单cron 实例运行。
在documentation about throttling 和API documentation 本身中,它谈到了标题项目以提供有关您的使用情况的反馈。例如:
x-mws-quota-max: 3600
x-mws-quota-remaining: 10
x-mws-quota-resetsOn: Wed, 06 Mar 2013 19:07:58 GMT
但是,我们的所有请求都没有返回此数据。当我尝试getQuotaMax() 和来自ResponseHeaderMetadata 对象的其他getter 时,它们都返回null。如果我直接转储 curl 请求,我会得到以下信息:
HTTP/1.1 200 OK
Server: Server
Date: Wed, 31 Jan 2018 10:30:20 GMT
Content-Type: text/xml
Content-Length: 182649
Connection: keep-alive
X-Amz-Date: Wed, 31 Jan 2018 10:30:20 GMT
x-amzn-Authorization: AAA SignedHeaders=X-Amz-Date, identity=com.amazon.aaa.MarketplaceWebServiceOrders.AndromedaControlService.amzn1.aaa.id.lwigtwr3h4inoeknjer76q4tl4.Default/1, Signed=true, Encrypted=false, Signature=M/AAAAexATrzvpAAAAAKJIK9mkwsBjPryIWcvnAAAAA=, Algorithm=HmacSHA256
x-mws-request-id: 9f4f29a2-aaaa-4eca-9c7a-8023bea06fab
x-mws-timestamp: 2018-01-31T10:30:19.677Z
x-mws-response-context: aaaaaLSsB3L83dPqsIYmrA3VnhhMZypSJ2yQ9sxK//zDuOBUUuCyYdPzCiDrgrrzqw/BJLbPVAo=
Vary: Accept-Encoding,User-Agent
<?xml version="1.0"?>
<ListOrdersResponse xmlns="https://mws.amazonservices.com/Orders/2013-09-01">
<ListOrdersResult>
<Orders>
...
在每晚的 cron 作业中捕获的异常似乎证实了 a) 节流是问题,b) 我们没有收到任何回复:
Caught Exception: Request is throttled
Response Status Code: 503
Error Code: RequestThrottled
Error Type: Unknown
Request ID: 94a816fd-d7cb-aaaa-9c46-d97ef4b338b1
XML: <?xml version="1.0"?>
<ErrorResponse xmlns="https://mws.amazonservices.com/Orders/2013-09-01">
<Error>
<Type></Type>
<Code>RequestThrottled</Code>
<Message>Request is throttled</Message>
</Error>
<RequestID>94a816fd-d7cb-aaaa-9c46-d97ef4b338b1</RequestID>
</ErrorResponse>
ResponseHeaderMetadata: RequestId: 94a816fd-d7cb-44a5-9c46-d97ef4b338b1, ResponseContext: Yzi1erdrrVZuGBzvtiUxd/94+Mj6QcN9BJReTcsg+MkelvfcYETwNjBER3CWqNhmA87P6n7sTq8=, Timestamp: 2018-01-30T22:00:59.545Z, Quota Max: , Quota Remaining: , Quota Resets At:
我们以前从未遇到过这个问题,但现在我们正在亚马逊上进行更多销售,这是不可避免的。但是,在实际获取节流标头方面,我是否遗漏了一些明显的东西,以便我可以实际采取对策?
作为旁注,我不认为每小时请求限制,除了节流,这里适用,因为它说它只适用于上面链接中的产品、报告和提要 API节流文档。最后一点是我们没有使用代理,而是直接从 PHP 脚本连接到 Amazon 服务器。
【问题讨论】:
-
解决同样的问题,据我所知,只有在服务具有每小时配额时才会发送这些标头。就我个人而言,我在 30 秒时踩油门,而我目前从 60 秒开始每次降低 100 毫秒。
-
我知道这是个老问题,但是 - 你是怎么解决这个问题的?
标签: php amazon-web-services curl