[英]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.