序文
Java で Basic 認証を使用して Curl コマンドをエミュレートしようとする場合Java の場合、次の点を考慮することが重要です:
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") ); // ... } }
一般的な問題
HttpClient 3.0 と 4.0.1 の両方の例で、無効なスコープ定義が原因で内部サーバー エラー (500) が発生する可能性があります。正しいスコープ定義は、ターゲット サーバーの構成によって異なります。スコープを AuthScope.ANY_HOST および AuthScope.ANY_PORT に設定すると、資格情報が任意のホストおよびポートに適用されると想定されますが、実際にはそうでない場合もあります。ターゲット サーバーの構成を確認し、適切なスコープ定義を使用すると、このエラーが解決されるはずです。
代替方法 (HttpClient 4.0.1)
HttpClient を使用して基本認証を実装する別のアプローチ4.0.1 は次のとおりです:
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); // ... } }
以上がHttpClient を使用して Java で HTTP 基本認証を実装する方法: よくある落とし穴を回避するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。