首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >制作AWS产品广告API请求iOS

制作AWS产品广告API请求iOS
EN

Stack Overflow用户
提问于 2014-03-02 00:14:32
回答 2查看 540关注 0票数 2

今天,我无法为aws的产品广告api提出"ItemSearch“请求。

首先,这是在2月24日星期一工作,现在是3月1日,它不起作用。我不知道是否有任何更新可能改变了AWS的工作方式。我搜索的时候什么都找不到。

我的第一个错误是:“请求已过期。时间戳日期为140301235753Z”--这意味着我为请求"140301235753Z“输入的时间超出了AWS为UTC时间存储的时间范围15分钟。我做了一些研究,最后修改了下面的代码。

代码语言:javascript
代码运行次数:0
运行
复制
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签名示例作为参考来检查下面的代码。

代码语言:javascript
代码运行次数:0
运行
复制
// 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];

我没有看到我的代码有任何错误。我通过google寻找一个应用程序,它可以创建我想要的字符串,以测试我的签名是否正确,但是AWS似乎没有任何东西(我可以找到,我可能只是一个糟糕的谷歌用户)。

我的AWS秘密钥匙里有个"/“字。我想这可能会扰乱计算HMAC的算法。所以我创建了新的密钥,直到amazon给我生成了一个带有奇怪字符的密钥,并对其进行了测试。这不管用..。

最终,我要做的是使用这些信息生成一个AWS产品广告API请求

代码语言:javascript
代码运行次数:0
运行
复制
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产品广告文档搜索了文档PDF,似乎无法解决我的问题。

最令人困惑的是,我的代码在6天前就开始工作了,而我什么也没改变。

EN

回答 2

Stack Overflow用户

发布于 2014-03-02 00:29:53

我也有过类似的第三方API体验。很明显,我的请求被重定向了,我不得不辞职。

请确保在此nsurlrequest委托方法中签名您的请求:

代码语言:javascript
代码运行次数:0
运行
复制
- (NSURLRequest *)connection: (NSURLConnection *)inConnection
             willSendRequest: (NSURLRequest *)inRequest
            redirectResponse: (NSURLResponse *)inRedirectResponse;
票数 0
EN

Stack Overflow用户

发布于 2014-04-09 19:42:21

我犯了一个错误,把编码身体参数的代码注释掉了。在取消注释并设置值之后,所有这些操作都很好。所以一定要对你的参数进行编码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22122206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档