Proxyを経由してアクセスする


DefaultHttpClientでBasic認証使ったアクセスを行う」や「DefaultHttpClientを使ってコンテンツを取得する」でDefaultHttpClientクラスを使ってネットワーク上のコンテンツにアクセスする方法を説明しましたが、そのアクセスの際にProxyサーバを経由することも可能です。

今回はその方法を説明したいと思います。

それでは続きへどうぞ。

Proxyサーバの設定

まずはProxyサーバを経由しない普通の場合のソースコードです。
今回はhttp://hoge.ne.jp/hoge.jpgをGetで取得することとします。

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet("http://hoge.ne.jp/hoge.jpg");
HttpResponse httpResponse = null;
try {
	httpResponse = httpClient.execute(request);
} catch (Exception e) {
	Log.d(TAG, "Error Execute");
}

次にProxyサーバを経由するようにコードを追加します。必要なコードは2行だけです。
※Proxyサーバのアドレスは192.168.0.1、ポートは8080番とします

まずはProxyサーバのアドレスとポートを指定してHttpHostクラスを生成します。
そしてそのHttpHostクラスのインスタンスを、DefaultHttpClientのインスタンスにProxyとしてパラメータに設定します。

DefaultHttpClient httpClient = new DefaultHttpClient();

// 以下の2行を追加
HttpHost proxy = new HttpHost("192.168.0.101", 8080);
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);

HttpGet request = new HttpGet("http://hoge.ne.jp/hoge.jpg");
HttpResponse httpResponse = null;
try {
	httpResponse = httpClient.execute(request);
} catch (Exception e) {
	Log.d(TAG, "Error Execute");
}

Proxyサーバにユーザ名とパスワードが必要な場合

DefaultHttpClientでBasic認証使ったアクセスを行う」と同じように行います。

Credentials credentials = new UsernamePasswordCredentials("HOGE","foofoo");
AuthScope scope = new AuthScope("192.168.0.101", 8080);
httpClient.getCredentialsProvider().setCredentials(scope, credentials);