使用HttpClient在Java中进行Http基本身份验证?

我试图模仿Java中此curl命令的功能:

curl --basic --user username:password -d "" http://ipaddress/test/login

我使用Commons HttpClient 3.0编写了以下内容,但最终还是500 Internal Server Error从服务器上获取了一个。有人可以告诉我我做错了什么吗?

public class HttpBasicAuth {

private static final String ENCODING = "UTF-8";

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

try {

HttpClient client = new HttpClient();

client.getState().setCredentials(

new AuthScope("ipaddress", 443, "realm"),

new UsernamePasswordCredentials("test1", "test1")

);

PostMethod post = new PostMethod(

"http://address/test/login");

post.setDoAuthentication( true );

try {

int status = client.executeMethod( post );

System.out.println(status + "\n" + post.getResponseBodyAsString());

} finally {

// release any connection resources used by the method

post.releaseConnection();

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

我后来尝试了Commons HttpClient 4.0.1,但仍然遇到相同的错误:

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.auth.AuthScope;

import org.apache.http.auth.UsernamePasswordCredentials;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.impl.client.DefaultHttpClient;

public class HttpBasicAuth {

private static final String ENCODING = "UTF-8";

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

try {

DefaultHttpClient httpclient = new DefaultHttpClient();

httpclient.getCredentialsProvider().setCredentials(

new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),

new UsernamePasswordCredentials("test1", "test1"));

HttpPost httppost = new HttpPost("http://host:post/test/login");

System.out.println("executing request " + httppost.getRequestLine());

HttpResponse response;

response = httpclient.execute(httppost);

HttpEntity entity = response.getEntity();

System.out.println("----------------------------------------");

System.out.println(response.getStatusLine());

if (entity != null) {

System.out.println("Response content length: " + entity.getContentLength());

}

if (entity != null) {

entity.consumeContent();

}

httpclient.getConnectionManager().shutdown();

} catch (ClientProtocolException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

回答:

好的,这样可以工作。万一有人想要它,这是对我有用的版本:)

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;

import java.util.Base64;

public class HttpBasicAuth {

public static void main(String[] args) {

try {

URL url = new URL ("http://ip:port/login");

String encoding = Base64.getEncoder().encodeToString(("test1:test1").getBytes(‌"UTF‌​-8"​));

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

connection.setRequestMethod("POST");

connection.setDoOutput(true);

connection.setRequestProperty ("Authorization", "Basic " + encoding);

InputStream content = (InputStream)connection.getInputStream();

BufferedReader in =

new BufferedReader (new InputStreamReader (content));

String line;

while ((line = in.readLine()) != null) {

System.out.println(line);

}

} catch(Exception e) {

e.printStackTrace();

}

}

}

以上是 使用HttpClient在Java中进行Http基本身份验证? 的全部内容, 来源链接: utcz.com/qa/431296.html

回到顶部