JavaでCurlを使用する

1. 概要

このチュートリアルでは、Javaプログラム内で_https://curl.haxx.se [curl] _ツールを使用する方法を見ていきます。
  • _Curl_は、HTTPとFTP、TELNET、SCPなどのプロトコルを使用して、サーバーと_curl_クライアント間でデータを転送するために使用されるネットワークツールです。

*2. Curl *の基本的な使用

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

    コマンドをオペレーティングシステムに直接送信する例を見てみましょう。
String command =
  "curl -X GET https://postman-echo.com/get?foo1=bar1&foo2=bar2";
ProcessBuilder processBuilder = new ProcessBuilder(command.split(" "));
まず、_ProcessBuilder_コンストラクターに渡す前に、_command_変数を作成します。
ここで、_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()__methodを使用してコマンドを実行しましょう。
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();
インスタンスが不要になったら、thedestroy()_ methodを呼び出してシステムリソースを解放する必要があります。

4. 結論

この記事では、Javaで_curl_を使用する2つの方法を示しました。
これとその他のコード例は、https://github.com/eugenp/tutorials/tree/master/core-java-modules/core-java-networking-2 [GitHubで]から入手できます。