XML 使用 HttpURLConnection 通过 http - 收到错误 401
XML over http using HttpURLConnection - getting error 401
我正在尝试使用 HttpURLConnection 通过 http url 发送 XML。
以下是我用来测试服务的 test curl 命令。
curl -H "Content-Type: text/xml" -H "User-Agent: some/7.88/1" -X POST
--Basic -u "username:password" -d '< ?xml packet ... >' 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: Server returned HTTP response code: 401 for URL:
http://ip:port/some/url
这意味着我没有发送正确的授权。
你能告诉我我做错了什么吗?
请尝试如下添加身份验证header
String encoded = Base64.getEncoder().encodeToString((username + ":" + password).getBytes(StandardCharsets.UTF_8));
conn.setRequestProperty("Authorization", "Basic " + encoded);
PS。它使用 Java 8 Base64 编码器
我正在尝试使用 HttpURLConnection 通过 http url 发送 XML。
以下是我用来测试服务的 test curl 命令。
curl -H "Content-Type: text/xml" -H "User-Agent: some/7.88/1" -X POST --Basic -u "username:password" -d '< ?xml packet ... >' 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: Server returned HTTP response code: 401 for URL: http://ip:port/some/url
这意味着我没有发送正确的授权。
你能告诉我我做错了什么吗?
请尝试如下添加身份验证header
String encoded = Base64.getEncoder().encodeToString((username + ":" + password).getBytes(StandardCharsets.UTF_8));
conn.setRequestProperty("Authorization", "Basic " + encoded);
PS。它使用 Java 8 Base64 编码器