Objective c 通过NSURLConnection从amazon下载

Objective c 通过NSURLConnection从amazon下载,objective-c,nsurlconnection,amazon,afnetworking,Objective C,Nsurlconnection,Amazon,Afnetworking,我正在尝试使用基于NSURLConnection的我自己的库从amazon服务器下载文件。amazon回复时会出现以下错误: <?xml version="1.0" encoding="UTF-8"?> <Error><Code>SignatureDoesNotMatch</Code> <Message>The request signature we calculated does not match the signature yo

我正在尝试使用基于NSURLConnection的我自己的库从amazon服务器下载文件。amazon回复时会出现以下错误:

<?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>
我用“…”代替了无助的信息,下载链接是这样的(没有理由发布原创,因为它的生命周期很短)

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

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

NSURL* url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
因为aws会给您已经编码的字符串,所以您应该避免对其进行两次编码

第二个原因更难理解。如果没有任何内容,则不应调用setHTTPBody。我确实

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