2014-03-02 31 views
2

今天我一直無法針對aws的產品廣告API的「ItemSearch」請求提出請求。製作AWS產品廣告API請求iOS

首先,這是2月24日星期一工作,現在3月1日工作不起作用。我不知道是否有任何更新可能改變了AWS的工作方式。搜索時找不到任何東西。

我的第一個錯誤是:「申請已過期時間戳的日期是1403Z」這意味着我的請求「1403Z」進入時間爲15分鐘出什麼AWS已存儲的UTC時間範圍。我做了一些研究,最終改變了下面的代碼。

NSDateFormatter *UTCFormatter = [[NSDateFormatter alloc] init]; 
UTCFormatter.dateFormat = @"yyMMddHHmmss'Z'"; 
UTCFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"]; 

NSString *timeStamp = [UTCFormatter stringFromDate:[NSDate date]]; 

我改變了@"yyMMddHHmmss'Z'"@"yyyy-MM-dd'T'HH:mm:ss'Z'"

重新運行的要求,我再次遇到了這個錯誤:「我們出的要求籤名不匹配您提供的簽名檢查您的AWS訪問密鑰。和簽署方法。「這意味着我計算的API調用的簽名部分在比較一個AWS收到我的請求時計算出的值時是錯誤的。

我已經使用這個鏈接Amazon Signature Examples作爲參考來檢查我的代碼。

// create HMAC with SHA256 
const char *cKey = [secretKey cStringUsingEncoding:NSUTF8StringEncoding]; 
const char *cData = [canonicalString cStringUsingEncoding:NSUTF8StringEncoding]; 
unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH]; 

CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC); 

NSData *hashData = [NSData dataWithBytes:cHMAC length:CC_SHA256_DIGEST_LENGTH]; 
NSString *signature = [[DTBase64Coding stringByEncodingData:hashData] stringByURLEncoding]; 

我沒有看到我的代碼錯誤。我已經通過谷歌查看了一個應用程序,它可能能夠創建我想要的字符串以測試我的簽名是否正確,但AWS似乎沒有任何東西(我可以找到,我可以只是一個糟糕的Google員工)。

我的AWS密鑰有一個「/」字符。我認爲這可能與計算HMAC的算法有關。所以我創建了新的密鑰,直到亞馬遜給我生成了一個帶有奇數字符並測試它的密鑰。它沒有工作....

最終什麼,我想說明的是使用該信息

NSString *verb = @"GET"; 
NSString *hostName = @"webservices.amazon.com"; 
NSString *path = @"/onca/xml"; 

NSDictionary *params = @{ 
         @"Service": @"AWSECommerceService", 
         @"AWSAccessKeyId": accessKey, 
         @"Operation": @"ItemSearch", 
         @"ResponseGroup": @"Large", 
         @"SearchIndex": @"Books", 
         @"Title": bookTitle, 
         @"AssociateTag" : trackingID 
         }; 

我已經取代敏感/動態信息與變量的AWS產品廣告API請求。

我已經通過文檔搜索PDF在AWS Product Advertising Documentation,似乎無法找出我的問題。

最令人困惑的部分是,我的代碼在6天前工作,我什麼也沒有改變。

+0

嗨,A'sa,你找到了你的問題的解決方案,我面臨着同樣的問題... – BADRI

+0

我做了noobie的錯誤,並註釋了編碼身體參數的代碼。如果你有類似的問題,我會驗證你的網址是否正確,並且主體有正確的參數:3 –

回答

0

我和另一個第三方API有過類似的經歷。顯然我的請求正在重定向,我不得不辭去我的請求。

一定要簽上你的要求在此的NSURLRequest委託方法:

- (NSURLRequest *)connection: (NSURLConnection *)inConnection 
      willSendRequest: (NSURLRequest *)inRequest 
      redirectResponse: (NSURLResponse *)inRedirectResponse; 
+0

我從這個URL中檢索XML的方法封裝在NSXMLParser中,通過 NSXMLParser * xmlParser = [[NSXMLParser alloc ] initWithContentsOfURL:xmlURL]; xmlParser.delegate = self; –

0

我犯了一個錯誤,小白和註釋掉編碼的車身參數的代碼。取消註釋並設置值後,它們都可以正常工作。所以確保你編碼你的參數。

相關問題