Pengesahan Asas HTTP dengan HttpClient dalam Java
Dalam artikel ini, kami akan meneroka cara melaksanakan Pengesahan Asas HTTP menggunakan perpustakaan HttpClient di Java . Pengesahan Asas HTTP ialah mekanisme pengesahan yang mudah dan digunakan secara meluas yang membolehkan pelanggan memberikan bukti kelayakannya (nama pengguna dan kata laluan) untuk mengakses sumber yang dilindungi.
HttpClient 3.0
Anda menyebut menghadapi Ralat Pelayan Dalaman 500 semasa menggunakan HttpClient 3.0. Berikut ialah versi ubah suai kod anda yang sepatutnya berfungsi:
public static void main(String[] args) { // TODO Auto-generated method stub try { HttpClient client = new HttpClient(); client.getParams().setAuthenticationPreemptive(true); // Add this line 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(); } }
HttpClient 4.0.1
Untuk HttpClient 4.0.1, anda boleh mencuba kod berikut:
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")); // Add this line httpclient.setPreemptiveAuth(true); 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(); } }
Penyelesaian Alternatif
Jika anda terus menghadapi isu, anda boleh mencuba penyelesaian alternatif menggunakan perpustakaan Apache HttpComponents. Berikut ialah contoh:
String encoding = Base64.getEncoder().encodeToString((user + ":" + pwd).getBytes()); HttpPost httpPost = new HttpPost("http://host:post/test/login"); httpPost.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + encoding); System.out.println("executing request " + httpPost.getRequestLine()); HttpResponse response = httpClient.execute(httpPost); HttpEntity entity = response.getEntity();
Atas ialah kandungan terperinci Bagaimana untuk Melakukan Pengesahan Asas HTTP dengan HttpClient di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!