亚马逊S3有大量的reasons,所以它会返回HTTP400错误请求。最相关的事实是,这些错误中的一些是由互联网的不可靠性造成的,例如请求超时。可能返回的另一个原因是存储桶或密钥名称无效。
我正在尝试使用由客户控制的密钥名称提供的密钥名称将文件上载到S3。我需要能够区分暂时性的400错误,如超时和错误的键/存储桶名称错误,它们不是暂时性的。暂时性错误表示我们应该重试该上传,而非暂时性错误表示我们应该停止尝试上传该文件。
但是,我不知道如何区分这两个错误!如果重要的话,我会尝试使用JetS3t应用程序接口来执行这些上传。如何区分错误键/存储桶名称错误和其他错误代码为400的错误?
发布于 2016-02-20 12:19:07
阅读响应正文。
在您引用的页面中:
响应的正文还包含有关错误的信息。
解析http错误代码附带的响应体。错误的解释几乎总是在响应正文中用XML拼写出来。
无意义请求示例(此处未编辑任何内容,这正是我用于GET请求以生成此错误的内容):
http://example-bucket.s3.amazonaws.com/?AWSAccessKeyId=AKIAEXAMPLEEXAMPLE&Signature=bogus&Expires=1500000000响应:
<Error>
<Code>InvalidAccessKeyId</Code>
<Message>
The AWS Access Key Id you provided does not exist in our records.
</Message>
<AWSAccessKeyId>AKIAEXAMPLEEXAMPLE</AWSAccessKeyId>
<RequestId>...</RequestId>
<HostId>...</HostId>
</Error>您将发现此内容与可能的错误列表之间存在非常密切的关联。
现在,从技术上讲,这是一个403而不是400,这只是我想出的第一个想法,一个容易手工制作的无意义的请求来生成一个错误,但是任何S3错误都应该生成一个类似的响应。
https://stackoverflow.com/questions/35509258
复制相似问题