Java – HTTP GETリクエストを送信する方法
JavaでHTTP GETリクエストを送信するには、主に以下の方法があります。
Java 11以降では、標準ライブラリのHttpClientクラス
を使用するのが一般的です。
このクラスは非同期通信もサポートしており、簡潔なコードでリクエストを送信できます。
具体的には、HttpClient
を作成し、HttpRequest
オブジェクトでURLやヘッダーを設定し、sendメソッド
でリクエストを実行します。
レスポンスはHttpResponse
オブジェクトで取得可能です。
Java 11未満では、HttpURLConnection
を使用する方法が一般的ですが、コードがやや冗長になります。
外部ライブラリとしては、Apache HttpClientやOkHttpも広く利用されています。
Java 11以降のHttpClientを使ったGETリクエスト
Java 11から新たに追加されたHttpClient
は、HTTPリクエストを簡単に送信できるクラスです。
以下に、HttpClient
を使用してGETリクエストを送信する方法を示します。
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class App {
public static void main(String[] args) {
// HttpClientのインスタンスを作成
HttpClient client = HttpClient.newHttpClient();
// GETリクエストを作成
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/data")) // リクエスト先のURI
.build();
// リクエストを送信し、レスポンスを受け取る
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body) // レスポンスボディを取得
.thenAccept(System.out::println) // 結果を出力
.join(); // 非同期処理を待機
}
}
HttpClient.newHttpClient()
で新しいHTTPクライアントを作成します。HttpRequest.newBuilder()
を使用してGETリクエストを構築します。sendAsyncメソッド
を使って非同期でリクエストを送信し、レスポンスを受け取ります。- 最後に、受け取ったレスポンスボディをコンソールに出力します。
実行結果は、リクエスト先のAPIからのレスポンス内容に依存します。
以下は、仮の出力例です。
{"key": "value", "anotherKey": "anotherValue"}
このように、Java 11以降のHttpClient
を使用することで、簡単にHTTP GETリクエストを送信し、レスポンスを受け取ることができます。
Java 11未満でのHttpURLConnectionを使ったGETリクエスト
Java 11未満では、HttpURLConnectionクラス
を使用してHTTPリクエストを送信することが一般的です。
以下に、HttpURLConnection
を使用してGETリクエストを送信する方法を示します。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class App {
public static void main(String[] args) {
try {
// リクエスト先のURLを指定
URL url = new URL("https://api.example.com/data");
// HttpURLConnectionのインスタンスを作成
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// GETメソッドを指定
connection.setRequestMethod("GET");
// レスポンスコードを取得
int responseCode = connection.getResponseCode();
// レスポンスコードが200の場合、レスポンスを読み取る
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
// レスポンスを行単位で読み取る
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// 結果を出力
System.out.println(response.toString());
} else {
System.out.println("GETリクエストに失敗しました。レスポンスコード: " + responseCode);
}
} catch (Exception e) {
e.printStackTrace(); // エラーが発生した場合の処理
}
}
}
URLクラス
を使用してリクエスト先のURLを指定します。HttpURLConnection
を使用してHTTP接続を開きます。setRequestMethod("GET")
でGETメソッド
を指定します。getResponseCode()メソッド
でレスポンスコードを取得し、200(成功)の場合にレスポンスを読み取ります。BufferedReader
を使用してレスポンスを行単位で読み取り、最終的に結果を出力します。
実行結果は、リクエスト先のAPIからのレスポンス内容に依存します。
以下は、仮の出力例です。
{"key": "value", "anotherKey": "anotherValue"}
このように、Java 11未満ではHttpURLConnection
を使用してGETリクエストを送信し、レスポンスを受け取ることができます。
外部ライブラリを使ったGETリクエスト
Javaでは、外部ライブラリを使用することで、HTTPリクエストをより簡単に扱うことができます。
特に、Apache HttpClientやOkHttpなどのライブラリは、使いやすさと機能の豊富さから人気があります。
ここでは、Apache HttpClientを使用したGETリクエストの例を示します。
Apache HttpClientを使用したGETリクエスト
依存関係の追加
まず、Apache HttpClientを使用するためには、Mavenプロジェクトに以下の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version> <!-- 最新のバージョンを確認してください -->
</dependency>
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class App {
public static void main(String[] args) {
// HttpClientのインスタンスを作成
try (CloseableHttpClient client = HttpClients.createDefault()) {
// GETリクエストを作成
HttpGet request = new HttpGet("https://api.example.com/data"); // リクエスト先のURL
// リクエストを送信し、レスポンスを受け取る
HttpResponse response = client.execute(request);
// レスポンスのステータスコードを取得
int statusCode = response.getStatusLine().getStatusCode();
// ステータスコードが200の場合、レスポンスボディを取得
if (statusCode == 200) {
String responseBody = EntityUtils.toString(response.getEntity());
// 結果を出力
System.out.println(responseBody);
} else {
System.out.println("GETリクエストに失敗しました。レスポンスコード: " + statusCode);
}
} catch (Exception e) {
e.printStackTrace(); // エラーが発生した場合の処理
}
}
}
CloseableHttpClient
を使用してHTTPクライアントを作成します。HttpGet
を使用してGETリクエストを構築します。executeメソッド
でリクエストを送信し、レスポンスを受け取ります。- ステータスコードが200の場合、
EntityUtils.toString
を使用してレスポンスボディを取得し、結果を出力します。
実行結果は、リクエスト先のAPIからのレスポンス内容に依存します。
以下は、仮の出力例です。
{"key": "value", "anotherKey": "anotherValue"}
このように、外部ライブラリを使用することで、HTTP GETリクエストを簡単に送信し、レスポンスを受け取ることができます。
Apache HttpClientは、特に多機能で使いやすいため、広く利用されています。
GETリクエストの応用例
GETリクエストは、データを取得するための基本的なHTTPメソッド
ですが、さまざまな応用が可能です。
ここでは、GETリクエストを使用したいくつかの具体的な応用例を紹介します。
1. APIからのデータ取得
多くのWebサービスはRESTful APIを提供しており、GETリクエストを使用してデータを取得できます。
例えば、天気情報や株価情報などを取得することができます。
// 天気情報APIからデータを取得する例
HttpGet request = new HttpGet("https://api.weather.com/v3/weather/conditions?apiKey=YOUR_API_KEY&location=Tokyo");
// リクエストを送信し、レスポンスを処理
2. Webページのスクレイピング
GETリクエストを使用してWebページのHTMLを取得し、必要な情報を抽出することができます。
これを「スクレイピング」と呼びます。
// スクレイピングの例
HttpGet request = new HttpGet("https://example.com");
// レスポンスを取得し、HTMLを解析する処理を追加
3. JSONデータの取得と解析
GETリクエストを使用してJSON形式のデータを取得し、Javaのオブジェクトに変換することができます。
これにより、データを簡単に扱うことができます。
// JSONデータを取得する例
HttpGet request = new HttpGet("https://api.example.com/data");
// レスポンスを取得し、JSONを解析する処理を追加
4. クエリパラメータを使用したリクエスト
GETリクエストでは、URLにクエリパラメータを追加することで、特定のデータを取得することができます。
例えば、検索機能を実装する際に使用されます。
// 検索機能の例
String searchQuery = "Java programming";
HttpGet request = new HttpGet("https://api.example.com/search?q=" + URLEncoder.encode(searchQuery, "UTF-8"));
// リクエストを送信し、結果を処理
5. 認証情報を含むリクエスト
APIによっては、GETリクエストに認証情報を含める必要があります。
BearerトークンやAPIキーを使用して、アクセスを制限することができます。
// 認証情報を含むリクエストの例
HttpGet request = new HttpGet("https://api.example.com/protected-data");
request.setHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN");
// リクエストを送信し、レスポンスを処理
GETリクエストは、さまざまな用途に応じて柔軟に使用することができます。
APIからのデータ取得、スクレイピング、JSONデータの解析、クエリパラメータの利用、認証情報の付加など、実際のアプリケーションでの活用方法は多岐にわたります。
これらの応用例を参考にして、GETリクエストを効果的に活用してみてください。
まとめ
この記事では、Javaを使用してHTTP GETリクエストを送信する方法について、Java 11以降のHttpClient
、Java 11未満のHttpURLConnection
、および外部ライブラリを利用したアプローチを紹介しました。
さらに、GETリクエストの具体的な応用例として、APIからのデータ取得やスクレイピング、JSONデータの解析、クエリパラメータの利用、認証情報を含むリクエストについても触れました。
これらの情報を基に、実際のプロジェクトでGETリクエストを活用し、さまざまなデータを取得するための実装に挑戦してみてください。