[英]Python HTTP POST Request to Amazon MWS API
我没有太多处理 API 的经验,而且在使用 Python 发出 HTTP POST 请求方面还很陌生。 想知道是否有人可以帮我解决这个问题。
他们提供了这个工具来手动访问数据,但我希望使用 Python 的请求库来实现自动化。 插入必要的信息,我得到这个作为 HTTP POST:
POST /Products/2011-10-01?AWSAccessKeyId=AKIAJEHA562QWNAIEIKA
&Action=GetLowestOfferListingsForASIN
&SellerId=<removed>
&MWSAuthToken=<removed>
&SignatureVersion=2
&Timestamp=2016-01-06T04%3A20%3A48Z
&Version=2011-10-01
&Signature=7vP5dwgpk%2Bi%2Bl1L9tOsd7tVXDeQOoyvjR2fYtEhJCEY%3D
&SignatureMethod=HmacSHA256
&MarketplaceId=<removed>
&ASINList.ASIN.1=B00GQLLCTA HTTP/1.1
Host: mws.amazonservices.com
x-amazon-user-agent: AmazonJavascriptScratchpad/1.0 (Language=Javascript)
Content-Type: text/xml
它还吐出一个 POST URL,我想我可以用它来提取我需要的数据,但是当我把它扔到我的浏览器中时我得到了这个:
Sender InvalidParameterValue Action 或 Operation 查询参数必须存在。
我将如何使用 Python 发送同样的请求?
任何帮助将不胜感激!
谢谢
编辑:
到目前为止,我已经尝试通过发布请求传递以下字典,其中包含暂存器工具中显示的所有参数:
params = {
'AWSAccessKeyId':'<removed>',
'Action':'GetMyPriceForASIN',
'SellerId':'<removed>',
'MWSAuthToken':'amzn.mws.fca4aee8-689d-74a2-5430-128d34f56873',
'SignatureVersion':'2',
'Timestamp':'2016-01-06T04%3A09%3A24Z',
'Version': '2011-10-01',
'Signature':'TZX1AP3dwl%2Fy3y5RLjZGorZFVLtQvW40KJ3IrTmWrw0%3D',
'SignatureMethod':'HmacSHA256',
'MarketplaceId':'<removed>',
'ASINList.ASIN.1':'B004KZQVF4'
}
page = requests.post("https://mws.amazonservices.com", params=params)
不过,我收到一条带有此消息的 404:
在此服务器上找不到资源 /。 API 部分丢失或您提供了无效的操作名称。
简短回答:
假设您可以使用 HTTP GET 使其工作并希望它使用 HTTP POST,则您的 URL 应该仅为/Products/2011-10-01
。 省略问号并将 URL 的其余部分(即AWSAccessKeyId=
及其后的所有内容)放入 POST 请求的正文中。 添加值为application/x-www-form-urlencoded
的Content-Type
标头。
长答案:
我刚刚遇到了同样的问题(我不知道如何让 POST 正常工作)。 我尝试使用GetMyFeesEstimate API 调用一次估算 20 个 ASIN 的费用。 使用 HTTP GET 我收到错误 414(请求 URI 太大),所以我决定尝试让 HTTP POST 工作。
MWS 文档仅指出“查询请求是简单的 HTTP 请求,分别在 URL 或 HTTP 正文中使用带有查询参数的 GET 或 POST 方法”,但不清楚具体如何执行此操作。
我在 Amazon SQS 文档中找到了更多详细信息,展示了如何在正文中构造带有查询参数的 POST 请求。 它希望对它们进行形式 URL 编码,但我发现只是获取我的 GET 请求的 URL 并将其放入请求正文(如上所述)对我有用(所以编码可能是兼容的,没有仔细检查) .
nonagon 的答案有效,但请注意,您必须将 POST 正文作为字符串发送,而不是字典(注意Content-Type
是application/x-www-form-urlencoded
,而不是application/json
)
所以你的 POST 正文应该是这样的:
AWSAccessKeyId=AKIAJEHA562QWNAIEIKA
&Action=GetLowestOfferListingsForASIN
&SellerId=<removed>
&MWSAuthToken=<removed>
&SignatureVersion=2
&Timestamp=2016-01-06T04%3A20%3A48Z
&Version=2011-10-01
&Signature=7vP5dwgpk%2Bi%2Bl1L9tOsd7tVXDeQOoyvjR2fYtEhJCEY%3D
&SignatureMethod=HmacSHA256
&MarketplaceId=<removed>
&ASINList.ASIN.1=B00GQLLCTA
完整的蟒蛇代码:
url = 'https://mws.amazonservices.jp/Products/2011-10-01'
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
data = <The big string above>
res = requests.post(url, data=body, headers=headers)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.