HttpClientでの認証(HttpClient4.0)

BASIC認証があるサーバに対してファイルを送信するサンプルです。


サンプル上での設定値は以下の通り。

設定値
TARGETHOSTホスト名+ドメイン名
TARGETPORTポート番号
UIDBASIC認証のユーザID
PWDBASIC認証のパスワード
TARGETURL送信先URL
FILE送信するファイル

BASIC認証を行うにはHttpClientに対してCredentialsオブジェクトを設定します。

24~26行目にまとめて記述していますが、分けるとこんな感じです。

AuthScope authScope = new AuthScope(TARGETHOST, TARGETPORT);
Credentials credentials = new UsernamePasswordCredentials(UID, PWD);
httpclient.getCredentialsProvider().setCredentials(authScope, credentials);

接続先ホストを設定します。
HttpHost への3番目の引数はプロトコルを指定します。

HttpHost host = new HttpHost(TARGETHOST, TARGETPORT, "http");

実際に接続する URL を指定します。
例えば PHP であれば http://~/hoge.php までのURLを指定します。

HttpPost httppost = new HttpPost(TARGETURL);

サンプルではファイルを送信しますので、FileBody に対して File を設定します。

FileBody sendFile = new FileBody(new File(FILE));

Multipart で送信するので MultipartEntity を使用します。

MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("file", sendFile);

HttpPost への setEntity へ設定します。

httppost.setEntity(reqEntity);

HttpClient への executeメソッドでサーバへ要求を発行します。

HttpResponse response = httpclient.execute(host, httppost);


sampleコード
package sample.http;


import java.io.File;

import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.DefaultHttpClient;


public class HttpAuthPost {
    
    public final int execute() throws Exception {
        
        DefaultHttpClient httpclient = new DefaultHttpClient();
        
        // BASIC認証の設定
        httpclient.getCredentialsProvider().setCredentials(
            new AuthScope(TARGETHOST, TARGETPORT),
            new UsernamePasswordCredentials(UID, PWD));
        
        // 接続先ホストを設定
        HttpHost host = new HttpHost(TARGETHOST, TARGETPORT, "http");
        // ターゲットURLを設定
        HttpPost httppost = new HttpPost(TARGETURL);
        // 送信ファイル生成
        FileBody sendFile = new FileBody(new File("FILE"));
        
        MultipartEntity reqEntity = new MultipartEntity();
        reqEntity.addPart("file", sendFile);
        
        httppost.setEntity(reqEntity);
        
        HttpResponse response = httpclient.execute(host, httppost);
        
        httpclient.getConnectionManager().shutdown();
        
        return response.getStatusLine().getStatusCode();
    }
}

コメント