gpt4 book ai didi

php - 为什么亚马逊 MWS 订单 API 不给我速率限制 header ?

转载 作者:行者123 更新时间:2023-12-04 17:46:03 37 4
gpt4 key购买 nike

tl;dr

为什么 x-mws-quota-maxx-mws-quota-remainingx-mws-quota-resetsOn header 总是从亚马逊对我的 API 调用的响应中省略?


我们在订单导入器中收到请求限制异常,我似乎无法弄清楚原因,或者至少为什么我们看不到任何限制 header 。

我们请求 MWS Orders API。首先,我们使用 ListOrders 操作列出订单,然后对于每个订单,我们使用 ListOrderItems 操作来获取项目详细信息,然后我们在内部将其用于库存和报告等内容。我们使用 Marketplace Web Service Order PHP SDK (@version 2013-09-01) 来执行此操作,并在全天每 15 分钟运行一次的 cron 作业上运行它,每个请求都会限制范围自上次 cron 实例运行以来,它的拉取命令只检索那些命令。

documentation about throttlingAPI 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:

我们以前从未遇到过这个问题,但现在我们在亚马逊上的销量增加了,这是不可避免的。但是,就实际获取节流 header 而言,我是否遗漏了一些明显的东西,因此我实际上可以采取对策?

作为旁注,我认为除了节流之外,每小时请求限制在此处适用,因为它说它仅适用于上面链接中的产品、报告和提要 API节流文档。最后要注意的是,我们没有使用代理,而是直接从 PHP 脚本连接到亚马逊服务器。

最佳答案

不确定 PHP MWS 客户端,但 C# 客户端实际上并不从 ResponseHeader 获取这些参数。因此,您需要自己稍微修改 MWS 客户端代码,以专门获取这些响应 header 参数。

我想这也适用于 PHP 客户端。

为了获得这些响应参数,需要在 C# MWS 客户端中进行的更改是:

  • 首先从亚马逊获取客户端代码;
  • 在 [SomeAmazonOperationResponse].ResponseHeaderMetadata 类上创建 3 个新的字符串属性,这些属性应与您要获取的参数相对应:x-mws-quota-max、x-mws-quota-剩余和 x-mws-quota-resetsOn;您可以将属性命名为 QuotaMax、QuotaRemaining 和 QuotaResetsOn;
  • 修改 ResponseHeaderMetadata 的构造函数以接收和初始化这些属性。
  • 转到 MarketplaceWebServiceClient.Invoke() 方法,确定获取 HttpWebResponse 的确切位置,并在初始化 ResponseHeaderMetadata 对象时(可能是一个名为 rhm 的 var),确保在 ctor 中指定新参数(以及每个它们中的一部分应该以类似于这样的方式获得:httpResponse.GetResponseHeader("x-mws-quota-max") )
  • 现在您应该可以访问响应中参数的新填充值
  • 享受

关于php - 为什么亚马逊 MWS 订单 API 不给我速率限制 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48541777/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com