ネットワーク

Java – HTTP POSTリクエストを送信する方法

JavaでHTTP POSTリクエストを送信するには、主に HttpURLConnection または HttpClient を使用します。

HttpURLConnection はJava SEに組み込まれており、軽量ですがコードがやや冗長です。

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

POSTリクエストでは、リクエストボディにデータを送信するため、適切なContent-Typeヘッダー(例: “application/json”)を設定し、データをリクエストの出力ストリームに書き込みます。

JavaでHTTP POSTリクエストを送信する方法

JavaでHTTP POSTリクエストを送信するには、HttpURLConnectionクラスを使用する方法が一般的です。

このクラスを利用することで、簡単にHTTPリクエストを作成し、サーバーにデータを送信することができます。

以下に、基本的な実装方法を示します。

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://example.com/api/post");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            
            // POSTメソッドを指定
            connection.setRequestMethod("POST");
            
            // リクエストヘッダーの設定
            connection.setRequestProperty("Content-Type", "application/json; utf-8");
            connection.setRequestProperty("Accept", "application/json");
            connection.setDoOutput(true); // 出力を有効にする
            
            // 送信するデータを作成
            String jsonInputString = "{\"name\": \"太郎\", \"age\": 30}";
            
            // データを送信
            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();
        }
    }
}
  1. HttpURLConnectionを使用して、指定したURLに対してPOSTリクエストを送信します。
  2. リクエストヘッダーには、Content-TypeAcceptを設定し、JSON形式でデータを送信することを示しています。
  3. OutputStreamを使用して、JSON形式のデータをリクエストボディに書き込みます。
  4. 最後に、レスポンスコードを取得して表示します。
レスポンスコード: 200

このコードを実行すると、指定したURLに対してPOSTリクエストが送信され、レスポンスコードが表示されます。

レスポンスコードが200の場合、リクエストが成功したことを示します。

POSTリクエストで送信するデータの形式

HTTP POSTリクエストでは、さまざまな形式でデータを送信することができます。

一般的なデータ形式には、以下のようなものがあります。

データ形式説明
JSONJavaScript Object Notation。軽量で人間にも読みやすい形式。
XMLExtensible Markup Language。構造化されたデータを表現するためのマークアップ言語。
Form URL EncodedフォームデータをURLエンコードした形式。主にWebフォームからのデータ送信に使用。
Multipart Formファイルアップロードなど、複数のデータを送信する際に使用。

JSON形式

JSONは、データをキーと値のペアで表現する形式で、特にAPIとの通信で広く使用されています。

以下は、JSON形式の例です。

{
    "name": "太郎",
    "age": 30,
    "isStudent": false
}

XML形式

XMLは、データをタグで囲むことで構造を持たせる形式です。

以下は、XML形式の例です。

<person>
    <name>太郎</name>
    <age>30</age>
    <isStudent>false</isStudent>
</person>

Form URL Encoded形式

Form URL Encoded形式は、Webフォームから送信されるデータの標準的な形式です。

以下は、Form URL Encoded形式の例です。

name=%E5%A4%AA%E9%83%8E&age=30&isStudent=false

Multipart Form形式

Multipart Form形式は、ファイルを含むデータを送信する際に使用されます。

以下は、Multipart Form形式の例です。

--boundary
Content-Disposition: form-data; name="name"
太郎
--boundary
Content-Disposition: form-data; name="file"; filename="example.txt"
Content-Type: text/plain
(ファイルの内容)
--boundary--

POSTリクエストで送信するデータの形式は、用途やAPIの仕様に応じて選択する必要があります。

JSON形式は特に人気があり、シンプルで扱いやすいため、多くのAPIで採用されています。

XML形式は、より複雑なデータ構造を必要とする場合に適しています。

Form URL Encoded形式は、主にWebフォームからのデータ送信に使用され、Multipart Form形式はファイルアップロードに最適です。

実践例:APIとの連携

Javaを使用してAPIと連携し、HTTP POSTリクエストを送信する実践例を紹介します。

この例では、JSON形式のデータを外部APIに送信し、レスポンスを受け取る方法を示します。

ここでは、架空のユーザー登録APIを使用します。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class App {
    public static void main(String[] args) {
        try {
            // APIのURLを指定
            URL url = new URL("https://example.com/api/register");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            
            // POSTメソッドを指定
            connection.setRequestMethod("POST");
            
            // リクエストヘッダーの設定
            connection.setRequestProperty("Content-Type", "application/json; utf-8");
            connection.setRequestProperty("Accept", "application/json");
            connection.setDoOutput(true); // 出力を有効にする
            
            // 送信するデータを作成
            String jsonInputString = "{\"username\": \"taro\", \"password\": \"password123\"}";
            
            // データを送信
            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);
            
            // レスポンス内容を読み取る
            try (BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"))) {
                StringBuilder response = new StringBuilder();
                String responseLine;
                while ((responseLine = br.readLine()) != null) {
                    response.append(responseLine.trim());
                }
                System.out.println("レスポンス内容: " + response.toString());
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  1. HttpURLConnectionを使用して、指定したAPIのURLに対してPOSTリクエストを送信します。
  2. リクエストヘッダーには、Content-TypeAcceptを設定し、JSON形式でデータを送信することを示しています。
  3. OutputStreamを使用して、ユーザー名とパスワードを含むJSON形式のデータをリクエストボディに書き込みます。
  4. レスポンスコードを取得し、成功した場合はレスポンス内容を読み取って表示します。
レスポンスコード: 201
レスポンス内容: {"message": "ユーザー登録が成功しました"}

このコードを実行すると、指定したAPIに対してユーザー登録のPOSTリクエストが送信され、レスポンスコードと内容が表示されます。

レスポンスコードが201の場合、リソースが正常に作成されたことを示します。

レスポンス内容には、APIからのメッセージが含まれています。

まとめ

この記事では、Javaを使用してHTTP POSTリクエストを送信する方法について詳しく解説しました。

具体的には、POSTリクエストで送信するデータの形式や、APIとの連携における実践例を通じて、実際のコードを示しながらその使い方を説明しました。

これを機に、実際のプロジェクトでAPIとの連携を試みて、さまざまなデータ形式を活用してみてください。

関連記事

Back to top button