通过NSURLConnection从亚马逊下载

时间:2012-09-25 13:34:35

标签: objective-c nsurlconnection amazon afnetworking

我正在尝试使用基于NSURLConnection的我自己的库从亚马逊服务器下载文件。亚马逊回答这个错误:

<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
<StringToSignBytes>47 45 54 ... 6e 67</StringToSignBytes>
<RequestId>...</RequestId><HostId>...</HostId> 
<SignatureProvided>45ZlY98%2FyrYcHcA%2BKDmArUic5%2BI%3D</SignatureProvided>
<StringToSign>...</StringToSign>
<AWSAccessKeyId>...</AWSAccessKeyId>
</Error>
我替换为“......”无奈的信息,下载链接就像这一个(没有理由发帖原创,因为它的生命周期很短)

https://test111.s3-eu-west-1.amazonaws.com/uploads/post/image/152/preview_image.png?AWSAccessKeyId=AKIAJCZPX74XBX6LU7FA&Signature=45ZlY98%2FyrYcHcA%2BKDmArUic5%2BI%3D&Expires=1348578742

相同的下载链接(与原始版本相同)适用于AFNetworking框架和Safari,但不适用于Chrome(!)。在我用AFNetworking替换自己的库之前,你可能会告诉我我做错了什么。谢谢!

1 个答案:

答案 0 :(得分:0)

我“喜欢”这些类型的错误,这些错误有两个或多个原因可以触发。第一个就是:

NSURL* url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

由于aws为您提供了已编码的字符串,因此应避免对其进行两次编码。

第二个原因更难理解。如果您没有任何内容,则不应该调用setHTTPBody。我做了......