使用HttpURLConnection的http over http - 获取错误401

时间:2017-04-24 15:10:12

标签: java curl httpurlconnection

我正在尝试使用HttpURLConnection通过http url发送XML。

以下是我用来测试服务的测试curl命令。

  

curl -H“Content-Type:text / xml”-H“User-Agent:some / 7.88 / 1”-X POST   --Basic -u“username:password”-d'< ?xml包...>' http://ip:port/some/url

它工作正常,但是当我尝试使用以下Java代码发送它时:

Java代码:

URL url = new URL("http://ip:port/some/url");   
String requestXMLPacket = "<?xml packet ... >"; 
HttpURLConnection conn = (HttpURLConnection) url.openConnection();                  
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type","text/xml");
conn.setRequestProperty("User-Agent", "some/7.88/1");
conn.setRequestProperty("basic -u", "username:password");

conn.setDoOutput(true);
conn.setInstanceFollowRedirects(false);
conn.setUseCaches(false);
conn.setDoInput(true);

我收到错误:

  

java.io.IOException:服务器返回HTTP响应代码:401为URL:   http://ip:port/some/url

这意味着我没有发送正确的授权。

你能告诉我这里我做错了什么。

1 个答案:

答案 0 :(得分:1)

请尝试添加身份验证标头,如下所示

String encoded = Base64.getEncoder().encodeToString((username + ":" + password).getBytes(StandardCharsets.UTF_8));
conn.setRequestProperty("Authorization", "Basic " + encoded);

PS。它使用Java 8 Base64编码器