我正在尝试从REST网址下载文件。这是我使用的代码
byte[] plainCredsBytes ="mytoken".getBytes();
byte[] base64CredsBytes = Base64.encodeBase64(plainCredsBytes);
String base64Creds = new String(base64CredsBytes);
URL url = new URL("https://api.xxxxx.com/files/62645/6hSFcVs3qIbvrGdXOfYzXQ/Test.png");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-type", "text/plain; charset=utf-8");
conn.setRequestProperty("Accept", "*/*");
conn.setRequestProperty("Authorization", "Basic " + base64Creds);
我收到java.lang.RuntimeException:失败:HTTP错误代码:400
我试图从响应中获取更多详细信息,这是
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>InvalidArgument</Code>
<Message>Only one auth mechanism allowed; only the X-Amz-Algorithm query parameter, Signature query string parameter or the Authorization header should be specified</Message>
<ArgumentName>Authorization</ArgumentName>
<ArgumentValue>Basic M2U3YzMzODU3NmY3ZjgwNzY2OWU5Yzg5NDg0Y2Y3Mzc= </ArgumentValue>
<RequestId>7BDEA0EBE74A63FF</RequestId>
<HostId>qU+xjS3nRcTbyBHPZyM89tGZC46sa9XzhkDLPD+p4oOSQc1UF9vSnpqB7A6Mlp5s76iqCOY2n+0=</HostId>
</Error>
我正在通过基本授权凭证,如果我将其删除,我会收到 HTTP错误代码:401 {&#34; message&#34;:&#34;需要身份验证&#34;}
有任何帮助吗?
答案 0 :(得分:0)
我收到了400 Bad请求,因为我调用的服务验证了我的身份验证并将其重定向到不需要身份验证的amazon服务,因此它抱怨请求。
我必须禁用跟随重定向并获取位置,然后发送另一个请求来获取文件
conn.setInstanceFollowRedirects(false);
实际上我为poc做的上述程序,我的实际客户端是使用spring rest模板。 ClientHttpRequestFactory的默认实现为GET执行setInstanceFollowRedirects(true),因此我必须创建一个自定义的ClientHttpRequestFactory。
public class CustomClientHttpRequestFactory extends SimpleClientHttpRequestFactory {
@Override
protected void prepareConnection(HttpURLConnection connection, String httpMethod) throws IOException {
.....
}
}