这是我试图复制的curl命令:
以下是卷曲请求。
curl user:password@localhost:8080/foo/bar -d property_one=value_one -d property_two=value_two -d property_three=value_three
这是httpurlconnection的代码
URL thisurl = new URL ("http://localhost:8080/foo");
String encoding = Base64Encoder.base64Encode("user:password");
HttpURLConnection connection = (HttpURLConnection) thisurl.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.addRequestProperty("property_one", "value_one");
connection.addRequestProperty("property_two", "value_two");
connection.addRequestProperty("property_three", "property_three");
connection.setRequestProperty ("Authorization", "Basic " + encoding);
InputStream content = (InputStream)connection.getInputStream();
在connection.getInputStream()行上,我收到401错误。我做的身份验证错了吗?
答案 0 :(得分:1)
401 error
因为关闭用户身份验证。您可能没有正确编码身份验证标头。使用它为我工作的代码。你可以在这里获得详细信息here
URL url = new URL ("http://localhost:8080/foo");
String encoding = org.apache.catalina.util.Base64.encode(credentials.getBytes("UTF-8"));
URLConnection uc = url.openConnection();
uc.setRequestProperty("Authorization", String.format("Basic %s", encoding));
答案 1 :(得分:1)
connection.setRequestMethod("GET");
您可以在此处将方法设置为" GET",这与您在curl
中使用的方法相同。
connection.setDoOutput(true);
在这里,您隐含地将其设置为" POST",这不是相同的,因此您没有任何理由期望相同的结果。
不要手动完成所有这些身份验证。使用java.net.Authenticator.
这就是它的用途。