Prelude
Apabila cuba meniru arahan curl dengan pengesahan Asas dalam Java, adalah penting untuk mempertimbangkan berikut:
HttpClient 3.0
public class HttpBasicAuth { // ... public static void main(String[] args) { // ... client.getState().setCredentials( new AuthScope("hostname"), // Use the IP address or hostname here new UsernamePasswordCredentials("username", "password") ); // ... } }
HttpClient 4.0.1
public class HttpBasicAuth { // ... public static void main(String[] args) { // ... DefaultHttpClient httpclient = new DefaultHttpClient(); httpclient.getCredentialsProvider().setCredentials( new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), new UsernamePasswordCredentials("username", "password") ); // ... } }
Isu Biasa
Dalam kedua-dua HttpClient Contoh 3.0 dan 4.0.1, Ralat Pelayan Dalaman (500) boleh berlaku disebabkan takrifan skop yang tidak sah. Definisi skop yang betul bergantung pada konfigurasi pelayan sasaran. Dengan menetapkan skop kepada AuthScope.ANY_HOST dan AuthScope.ANY_PORT, anda mengandaikan bahawa bukti kelayakan digunakan untuk mana-mana hos dan port, yang mungkin tidak berlaku. Mengesahkan konfigurasi pelayan sasaran dan menggunakan definisi skop yang sesuai harus menyelesaikan ralat ini.
Kaedah Alternatif (HttpClient 4.0.1)
Satu lagi pendekatan untuk melaksanakan pengesahan Asas menggunakan HttpClient 4.0.1 adalah seperti berikut:
public class HttpBasicAuth { // ... public static void main(String[] args) { // ... String encoding = Base64.getEncoder().encodeToString((user + ":" + pwd).getBytes()); HttpPost httpPost = new HttpPost("http://host:post/test/login"); httpPost.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + encoding); // ... } }
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pengesahan Asas HTTP di Java dengan HttpClient: Mengelakkan Perangkap Biasa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!