为什么在我对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:
我们之前从未遇到过这个问题,但现在我们正在亚马逊上进行更多的销售,这是不可避免的。但是,在实际获得限制标题方面,我是否遗漏了一些明显的东西,以便我可以实际采取对策措施?
作为旁注,除了限制之外,我不会认为每小时的请求限制,因为它表示它仅适用于产品,报告和Feed中的API上面链接的限制文档。最后一点是,我们不使用代理并直接从PHP脚本连接到Amazon服务器。
答案 0 :(得分:1)
不确定PHP MWS客户端,但是C#并没有实际从ResponseHeader获取这些参数。因此,您需要自己修改MWS客户端代码,以专门使用这些响应头参数。
我想这同样适用于PHP客户端。
为了获得这些响应参数,需要在C#MWS客户端中进行的更改是: