0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

(調査中)javaでhttpclientでファイルをレスポンスとして受け取る。ただし、ファイルはローカルに保存しないで別のところに渡す

Posted at

JavaでHttpClientを使用して、ファイルをレスポンスとして受け取り、ローカルに保存せずに別の場所(例えば別のURLに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;
import java.io.IOException;
import java.nio.ByteBuffer;

public class HttpClientRelayWithoutFile {
    public static void main(String[] args) {
        // 最初のリクエストのURL
        String initialUrl = "https://example.com/path/to/source/file";
        
        // 次のリクエストのURL
        String destinationUrl = "https://example.com/path/to/destination";

        // HttpClientを作成
        HttpClient client = HttpClient.newHttpClient();

        // 初回リクエストを作成
        HttpRequest initialRequest = HttpRequest.newBuilder()
                .uri(URI.create(initialUrl))
                .build();

        try {
            // 初回リクエストを送信し、レスポンスをバイト配列として取得
            HttpResponse<byte[]> initialResponse = client.send(initialRequest, HttpResponse.BodyHandlers.ofByteArray());

            // レスポンスのステータスコードをチェック
            if (initialResponse.statusCode() == 200) {
                System.out.println("Initial file downloaded successfully");

                // レスポンスボディを取得
                byte[] fileBytes = initialResponse.body();

                // 次のリクエストを作成し、取得したバイトデータをボディとして設定
                HttpRequest destinationRequest = HttpRequest.newBuilder()
                        .uri(URI.create(destinationUrl))
                        .POST(BodyPublishers.ofByteArray(fileBytes))
                        .build();

                // 次のリクエストを送信し、レスポンスを取得
                HttpResponse<String> destinationResponse = client.send(destinationRequest, HttpResponse.BodyHandlers.ofString());

                // レスポンスのステータスコードをチェック
                if (destinationResponse.statusCode() == 200) {
                    System.out.println("File forwarded successfully to " + destinationUrl);
                } else {
                    System.out.println("Failed to forward file. HTTP status code: " + destinationResponse.statusCode());
                }
            } else {
                System.out.println("Failed to download initial file. HTTP status code: " + initialResponse.statusCode());
            }
        } catch (IOException | InterruptedException e) {
            System.err.println("Error occurred: " + e.getMessage());
        }
    }
}

コードの説明

URLの設定:

initialUrlには最初のリクエストを送信するURLを設定します。
destinationUrlには次のリクエストを送信するURLを設定します。

HttpClientの作成:

HttpClient.newHttpClient()でHttpClientのインスタンスを作成します。

初回リクエストの作成と送信:

HttpRequest.newBuilder().uri(URI.create(initialUrl)).build()で初回のHttpRequestインスタンスを作成します。
client.send(initialRequest, HttpResponse.BodyHandlers.ofByteArray())で初回リクエストを送信し、レスポンスをバイト配列として取得します。
レスポンスのステータスコードをチェック:

ステータスコードが200(HTTP OK)であることを確認します。

次のリクエストの作成と送信:

HttpRequest.newBuilder().uri(URI.create(destinationUrl)).POST(BodyPublishers.ofByteArray(fileBytes)).build()で取得したバイトデータをボディとして次のリクエストを作成します。
client.send(destinationRequest, HttpResponse.BodyHandlers.ofString())で次のリクエストを送信し、レスポンスを取得します。

レスポンスのステータスコードをチェック:

ステータスコードが200(HTTP OK)であることを確認します。
このコードを使用することで、指定されたURLからファイルをダウンロードし、そのファイルを別のURLにPOSTリクエストとして再送信することができます。ファイルをローカルに保存せずに直接バイト配列として扱うため、効率的にデータを転送できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?