HttpUrlConnection身份验证无效

时间:2015-10-07 04:03:57

标签: java curl httpurlconnection

这是我试图复制的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错误。我做的身份验证错了吗?

2 个答案:

答案 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.这就是它的用途。