Java – HTTPリクエストの送信方法をわかりやすく解説
JavaでHTTPリクエストを送信するには、主に標準ライブラリのHttpURLConnection
や、外部ライブラリのApache HttpClient
やOkHttp
が使用されます。
HttpURLConnection
は軽量で標準的ですが、コードがやや冗長です。
一方、HttpClient
(Java 11以降)は非同期処理や簡潔な記述が可能です。
例えば、HttpClient
を使う場合、HttpRequest
でリクエストを構築し、HttpClient
のsendメソッド
で送信します。
HttpURLConnectionを使ったHTTPリクエストの送信
Javaでは、HttpURLConnectionクラス
を使用してHTTPリクエストを送信することができます。
このクラスは、HTTP通信を行うための基本的な機能を提供します。
以下に、GETリクエストとPOSTリクエストの送信方法を示します。
GETリクエストの送信
GETリクエストは、指定したURLからデータを取得するために使用されます。
以下は、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 connection = (HttpURLConnection) url.openConnection();
// GETメソッドを指定
connection.setRequestMethod("GET");
// レスポンスコードを取得
int responseCode = connection.getResponseCode();
// レスポンスを読み取る
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("レスポンスコード: " + responseCode);
System.out.println("レスポンス内容: " + response.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
このコードでは、指定したURLにGETリクエストを送信し、レスポンスコードとレスポンス内容を表示します。
レスポンスコード: 200
レスポンス内容: { "data": "sample data" }
POSTリクエストの送信
POSTリクエストは、サーバーにデータを送信するために使用されます。
以下は、HttpURLConnection
を使ったPOSTリクエストのサンプルコードです。
import java.io.OutputStream;
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 connection = (HttpURLConnection) url.openConnection();
// POSTメソッドを指定
connection.setRequestMethod("POST");
connection.setDoOutput(true); // 出力を有効にする
// リクエストヘッダーを設定
connection.setRequestProperty("Content-Type", "application/json");
// 送信するデータを作成
String jsonInputString = "{\"name\": \"sample\", \"value\": 123}";
// データを送信
try (OutputStream os = connection.getOutputStream()) {
byte[] input = jsonInputString.getBytes("utf-8");
os.write(input, 0, input.length);
}
// レスポンスコードを取得
int responseCode = connection.getResponseCode();
// 結果を表示
System.out.println("レスポンスコード: " + responseCode);
} catch (Exception e) {
e.printStackTrace();
}
}
}
このコードでは、指定したURLにPOSTリクエストを送信し、レスポンスコードを表示します。
レスポンスコード: 201
HttpURLConnection
を使用することで、Javaで簡単にHTTPリクエストを送信することができます。
GETリクエストとPOSTリクエストの基本的な使い方を理解することで、さまざまなAPIと連携することが可能になります。
Java 11のHttpClientを使ったHTTPリクエストの送信
Java 11から新たに追加されたHttpClientクラス
は、HTTPリクエストを送信するためのよりモダンで使いやすいAPIを提供します。
HttpClient
は、非同期処理やストリーミングなどの機能もサポートしており、より柔軟なHTTP通信が可能です。
以下に、GETリクエストとPOSTリクエストの送信方法を示します。
GETリクエストの送信
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) {
try {
// HttpClientのインスタンスを作成
HttpClient client = HttpClient.newHttpClient();
// GETリクエストを作成
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://api.example.com/data"))
.GET() // GETメソッドを指定
.build();
// リクエストを送信し、レスポンスを受け取る
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
// 結果を表示
System.out.println("レスポンスコード: " + response.statusCode());
System.out.println("レスポンス内容: " + response.body());
} catch (Exception e) {
e.printStackTrace();
}
}
}
このコードでは、指定したURLにGETリクエストを送信し、レスポンスコードとレスポンス内容を表示します。
レスポンスコード: 200
レスポンス内容: { "data": "sample data" }
POSTリクエストの送信
次に、HttpClient
を使用したPOSTリクエストのサンプルコードを示します。
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpRequest.BodyPublishers;
public class App {
public static void main(String[] args) {
try {
// HttpClientのインスタンスを作成
HttpClient client = HttpClient.newHttpClient();
// POSTリクエストを作成
String jsonInputString = "{\"name\": \"sample\", \"value\": 123}";
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://api.example.com/data"))
.header("Content-Type", "application/json")
.POST(BodyPublishers.ofString(jsonInputString)) // POSTメソッドを指定
.build();
// リクエストを送信し、レスポンスを受け取る
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
// 結果を表示
System.out.println("レスポンスコード: " + response.statusCode());
} catch (Exception e) {
e.printStackTrace();
}
}
}
このコードでは、指定したURLにPOSTリクエストを送信し、レスポンスコードを表示します。
レスポンスコード: 201
Java 11のHttpClient
を使用することで、HTTPリクエストの送信がより簡単かつ直感的に行えるようになりました。
GETリクエストとPOSTリクエストの基本的な使い方を理解することで、さまざまなAPIと連携することが可能になります。
外部ライブラリを使ったHTTPリクエストの送信
Javaでは、外部ライブラリを使用することで、HTTPリクエストの送信をさらに簡単に行うことができます。
特に人気のあるライブラリには、Apache HttpClientやOkHttpがあります。
ここでは、これらのライブラリを使ったHTTPリクエストの送信方法を紹介します。
Apache HttpClientを使ったGETリクエストの送信
Apache HttpClientは、非常に多機能で柔軟なHTTPクライアントライブラリです。
以下は、Apache HttpClientを使用したGETリクエストのサンプルコードです。
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) {
try (CloseableHttpClient client = HttpClients.createDefault()) {
// GETリクエストを作成
HttpGet request = new HttpGet("https://api.example.com/data");
// リクエストを送信し、レスポンスを受け取る
HttpResponse response = client.execute(request);
// レスポンス内容を取得
String responseBody = EntityUtils.toString(response.getEntity());
// 結果を表示
System.out.println("レスポンスコード: " + response.getStatusLine().getStatusCode());
System.out.println("レスポンス内容: " + responseBody);
} catch (Exception e) {
e.printStackTrace();
}
}
}
このコードでは、Apache HttpClientを使用して指定したURLにGETリクエストを送信し、レスポンスコードとレスポンス内容を表示します。
レスポンスコード: 200
レスポンス内容: { "data": "sample data" }
Apache HttpClientを使ったPOSTリクエストの送信
次に、Apache HttpClientを使用したPOSTリクエストのサンプルコードを示します。
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
public class App {
public static void main(String[] args) {
try (CloseableHttpClient client = HttpClients.createDefault()) {
// POSTリクエストを作成
HttpPost post = new HttpPost("https://api.example.com/data");
post.setHeader("Content-Type", "application/json");
// 送信するデータを作成
String jsonInputString = "{\"name\": \"sample\", \"value\": 123}";
post.setEntity(new StringEntity(jsonInputString));
// リクエストを送信し、レスポンスを受け取る
HttpResponse response = client.execute(post);
// 結果を表示
System.out.println("レスポンスコード: " + response.getStatusLine().getStatusCode());
} catch (Exception e) {
e.printStackTrace();
}
}
}
このコードでは、Apache HttpClientを使用して指定したURLにPOSTリクエストを送信し、レスポンスコードを表示します。
レスポンスコード: 201
OkHttpを使ったGETリクエストの送信
OkHttpは、シンプルで効率的なHTTPクライアントライブラリです。
以下は、OkHttpを使用したGETリクエストのサンプルコードです。
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class App {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
// GETリクエストを作成
Request request = new Request.Builder()
.url("https://api.example.com/data")
.build();
try (Response response = client.newCall(request).execute()) {
// 結果を表示
System.out.println("レスポンスコード: " + response.code());
System.out.println("レスポンス内容: " + response.body().string());
} catch (Exception e) {
e.printStackTrace();
}
}
}
このコードでは、OkHttpを使用して指定したURLにGETリクエストを送信し、レスポンスコードとレスポンス内容を表示します。
レスポンスコード: 200
レスポンス内容: { "data": "sample data" }
OkHttpを使ったPOSTリクエストの送信
次に、OkHttpを使用したPOSTリクエストのサンプルコードを示します。
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class App {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
// POSTリクエストを作成
MediaType JSON = MediaType.get("application/json; charset=utf-8");
String jsonInputString = "{\"name\": \"sample\", \"value\": 123}";
RequestBody body = RequestBody.create(jsonInputString, JSON);
Request request = new Request.Builder()
.url("https://api.example.com/data")
.post(body) // POSTメソッドを指定
.build();
try (Response response = client.newCall(request).execute()) {
// 結果を表示
System.out.println("レスポンスコード: " + response.code());
} catch (Exception e) {
e.printStackTrace();
}
}
}
このコードでは、OkHttpを使用して指定したURLにPOSTリクエストを送信し、レスポンスコードを表示します。
レスポンスコード: 201
外部ライブラリを使用することで、JavaでのHTTPリクエストの送信がより簡単かつ効率的になります。
Apache HttpClientやOkHttpを使うことで、さまざまなHTTP通信を簡単に実装できるようになります。
まとめ
この記事では、Javaを使用してHTTPリクエストを送信する方法について、HttpURLConnection
、Java 11のHttpClient
、および外部ライブラリであるApache HttpClientとOkHttpの4つのアプローチを紹介しました。
これらの手法を活用することで、さまざまなAPIと連携し、データの取得や送信を効率的に行うことが可能になります。
ぜひ、実際のプロジェクトでこれらの技術を試してみて、HTTP通信の実装に役立ててください。