1

我正在尝试使用我自己的基于 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 替换我自己的库之前,你可能会告诉我我做错了什么。谢谢!

4

1 回答 1

0

我“喜欢”这些类型的错误,它们有两个或更多的触发理由。第一个是这样的:

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

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

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

于 2012-09-25T18:53:16.710 回答