ネットワーク

Java – HTTPリクエストの送信方法をわかりやすく解説

JavaでHTTPリクエストを送信するには、主に標準ライブラリのHttpURLConnectionや、外部ライブラリのApache HttpClientOkHttpが使用されます。

HttpURLConnectionは軽量で標準的ですが、コードがやや冗長です。

一方、HttpClient(Java 11以降)は非同期処理や簡潔な記述が可能です。

例えば、HttpClientを使う場合、HttpRequestでリクエストを構築し、HttpClientsendメソッドで送信します。

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通信の実装に役立ててください。

関連記事

Back to top button