HttpClient 4 – リダイレクトに従わない
1概要
この記事では、私はどのようにApache HttpClient 4を設定してリダイレクトの追跡を停止するかを説明します。
デフォルトでは、HTTP仕様に従い、HttpClientは自動的にリダイレクトに従います。
いくつかのユースケースでは、それは完全にうまくいくかもしれませんが、それが望まれないユースケースが確かにあります – そして私たちはそのデフォルトの振る舞いを変更する方法を見て、リダイレクトを追うのをやめます** 。
もっと深く掘り下げて、HttpClientを使ってできる他の素晴らしいことを学びたい場合は、
HttpClientのメインチュートリアル
に進んでください。
2リダイレクトしない
2.1. HttpClient 4.3より前
Httpクライアントの以前のバージョン(4.3より前)では、クライアントがリダイレクトに対して行うことを次のように設定できます。
@Test
public void givenRedirectsAreDisabled__whenConsumingUrlWhichRedirects__thenNotRedirected()
throws ClientProtocolException, IOException {
DefaultHttpClient instance = new DefaultHttpClient();
HttpParams params = new BasicHttpParams();
params.setParameter(ClientPNames.HANDLE__REDIRECTS, false);
//HttpClientParams.setRedirecting(params, false);//alternative
HttpGet httpGet = new HttpGet("http://t.co/I5YYd9tddw");
httpGet.setParams(params);
CloseableHttpResponse response = instance.execute(httpGet);
assertThat(response.getStatusLine().getStatusCode(), equalTo(301));
}
実際の生の
http.protocol.handle-redirects
パラメータを設定せずにリダイレクト動作を設定するために使用できる代替のAPIに注意してください。
HttpClientParams.setRedirecting(params, false);
フォローリダイレクトを無効にすると、Http Responseのステータスコードが
301 Moved Permanently
になっていることを確認できます。
** 2.2. HttpClient 4.3以降
-
HttpClient 4.3では、クライアントを構築および設定するための、よりクリーンでより高度なAPI ** が導入されました。
@Test
public void givenRedirectsAreDisabled__whenConsumingUrlWhichRedirects__thenNotRedirected()
throws ClientProtocolException, IOException {
HttpClient instance = HttpClientBuilder.create().disableRedirectHandling().build();
HttpResponse response = instance.execute(new HttpGet("http://t.co/I5YYd9tddw"));
assertThat(response.getStatusLine().getStatusCode(), equalTo(301));
}
新しいAPIは、個々の要求だけではなく、このリダイレクト動作を使用してクライアント全体を構成します。
3結論
このクイックチュートリアルでは、HTTPリダイレクトを自動的に追跡できないようにするための、Apache HttpClientの設定方法について説明しました。
これらすべての例とコードスニペットの実装はhttps://github.com/eugenp/tutorials/tree/master/httpclient#readme[my githubプロジェクト]にあります。そのままインポートして実行するのは簡単です。