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リクエストとして再送信することができます。ファイルをローカルに保存せずに直接バイト配列として扱うため、効率的にデータを転送できます。