Android HttpURLConnection PUT 到 Amazon AWS S3 403 错误

May*_*hta 4 java android put amazon-s3 httpurlconnection

使用具有签名、到期日和访问密钥的预签名 URL 将文件上传到 Amazon S3,使用以下代码我可以使用普通的 java 代码上传文件,但在 Android 中相同的代码给了我 403 错误。使用 Amazon SDK 生成预签名 URL

我已阅读http://developer.android.com/reference/java/net/HttpURLConnection.htmlhttp://android-developers.blogspot.com/2011/09/androids-http-clients.html但无法阅读弄清楚我应该使用什么标头参数,我猜在 android 中它是在服务器拒绝的请求中设置标头

    HttpURLConnection connection=(HttpURLConnection) url.openConnection();
    connection.setDoOutput(true);
    connection.setRequestMethod("PUT"); 
    OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
    out.write("This text uploaded as object.");
    out.close();
    int responseCode = connection.getResponseCode();
Run Code Online (Sandbox Code Playgroud)

异常:403;签名不匹配:-o

有没有人遇到过这个问题?或者更多关于从android库在幕后添加哪些Header参数的细节?

Nis*_*hur 5

请像这样设置您的内容类型:

connection.setRequestProperty("Content-Type"," ");
Run Code Online (Sandbox Code Playgroud)

因为 HttpsUrlConnection 的默认自动生成内容类型为:

"Content-Type: application/x-www-form-urlencoded"
Run Code Online (Sandbox Code Playgroud)

这将导致签名不匹配。