1. 概要

このチュートリアルでは、Javaプログラム内でcurlツールを使用する方法を見ていきます。

Curlは、HTTP、FTP、TELNET、SCPなどのプロトコルを使用してサーバーとcurlクライアントの間でデータを転送するために使用されるネットワーキングツールです。

2. カールの基本的な使い方

ProcessBuilder Process クラスのインスタンスを構築するためのヘルパークラスを使用して、Javaからcurlコマンドを実行できます。

コマンドをオペレーティングシステムに直接送信する例を見てみましょう。

String command =
  "curl -X GET https://postman-echo.com/get?foo1=bar1&foo2=bar2";
ProcessBuilder processBuilder = new ProcessBuilder(command.split(" "));

まず、 command 変数を作成してから、ProcessBuilderコンストラクターに渡します。

ここで、 curl 実行可能ファイルがシステムパス上にない場合は、コマンド文字列でそのフルパスを指定する必要があることに注意してください。

次に、 ProcessBuilder の作業ディレクトリを設定し、プロセスを開始できます。

processBuilder.directory(new File("/home/"));
Process process = processBuilder.start();

これ以降、 Process インスタンスからアクセスすることにより、InputStreamを取得できます。

InputStream inputStream = process.getInputStream();

処理が完了すると、次の終了コードを取得できます。

int exitCode = process.exitValue();

追加のコマンドを実行する必要がある場合は、 String 配列で新しいコマンドと引数を渡すことにより、ProcessBuilderインスタンスを再利用できます。

processBuilder.command(
  new String[]{"curl", "-X", "GET", "https://postman-echo.com?foo=bar"});

最後に、各 Process インスタンスを終了するには、次を使用する必要があります。

process.destroy();

3. ProcessBuilderの簡単な代替手段

ProcessBuilder クラスを使用する代わりに、 Runtime.getRuntime()を使用してProcessクラスのインスタンスを取得できます。

別のサンプルcurlコマンドを見てみましょう–今回はPOSTリクエストを使用します。

curl -X POST https://postman-echo.com/post --data foo1=bar1&foo2=bar2

それでは、 Runtime.getRuntime()メソッドを使用してコマンドを実行してみましょう。

String command = "curl -X POST https://postman-echo.com/post --data foo1=bar1&foo2=bar2";
Process process = Runtime.getRuntime().exec(command);

まず、 Process クラスのインスタンスを再度作成しますが、今回は Runtime.getRuntime()を使用します。 getInputStream()メソッドを呼び出すことにより、前の例のようにInputStreamを取得できます。

process.getInputStream();

インスタンスが不要になったら、 destroy()メソッドを呼び出してシステムリソースを解放する必要があります。

4. 結論

この記事では、Javaでcurlを使用する2つの方法を示しました。

このコード例とその他のコード例は、GitHubでから入手できます。