cURLを使用したREST API呼び出しの方法

cURLを使用したREST APIリクエスト(GET、POST、PUT、DELETEなど)の実行方法と、Web Unlockerプロキシによる効率化手法を学びましょう。
3 分読
How to Use cURL With REST API blog image

cURL(Client URL)は数十年にわたり定番のコマンドラインHTTPクライアントです。APIテスト、ウェブページ取得、ファイル転送など、ウェブ開発のあらゆる局面で開発者や管理者から広く利用されています。ウェブスクレイピングでは主にHTTPリクエストのテストにcURLを使用します。

REST(Representational State Transfer)はAPI(アプリケーションプログラミングインターフェース)構築のための標準規格です。REST APIでは、サーバーは4つの基本リクエストタイプ(GETPOSTPUTDELETE)を処理するよう構成されます。これらの各メソッドはウェブサーバーとのやり取りに使用されます。詳細は本記事で後述します。

はじめに

インストール

cURLは現在、主要なオペレーティングシステムのほとんどにプリインストールされています。長年Linuxの定番ツールでしたが、macOSやWindowsでもデフォルトで含まれるようになりました。cURLのインストール状況は次のコマンドで確認できます。

curl --version

cURLが正しくインストールされている場合、以下のような応答が表示されます。最も重要なのは、--versionコマンドがバージョン番号を出力することです。下図ではバージョン番号がcurl 7.81.0となっています。残りの出力はリリース情報やOS固有の情報です。

curl 7.81.0 (x86_64-pc-linux-gnu) libcurl/7.81.0 OpenSSL/3.0.2 zlib/1.2.11 brotli/1.0.9 zstd/1.4.8 libidn2/2.3.2 libpsl/0.21.0 (+libidn2/2.3.2) libssh/0.9.6/openssl/zlib nghttp2/1.43.0 librtmp/2.3 OpenLDAP/2.5.18
Release-Date: 2022-01-05
プロトコル: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp 
機能: alt-svc AsynchDNS brotli GSS-API HSTS HTTP2 HTTPS-プロキシ IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL TLS-SRP UnixSockets zstd

何らかの理由でcURLがインストールされていない場合は、こちらのダウンロードページからOSに合ったバージョンを入手できます。

<!–

  • curlのインストール方法: 簡潔に、OS固有の手順へのリンクを記載
    –>

cURLの使用方法

GETリクエストの実行

最も一般的なHTTPリクエストはGETリクエストです。情報を取得するために GETを使用します。ウェブページを取得する際、ブラウザは内部でGETを実行しています。cURLではGETフラグを使用してこれを実行します。以下の例はhttps://jsonplaceholder.typicode.com/postsに GETを送信します。

curl -X GET https://jsonplaceholder.typicode.com/posts

このリクエストを実行すると、投稿がレスポンスとして返されます。以下はレスポンスの一部です。

{
    "userId": 1,
    "id": 1,
    "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
    "body": "quia et suscipitnsuscipit recusandae consequuntur expedita et cumnreprehenderit molestiae ut ut quas totamnnostrum rerum est autem sunt rem eveniet architecto"
  },
  {
    "userId": 1,
    "id": 2,
    "title": "qui est esse",
    "body": "万物は時と共に流れゆく。苦痛は存在せず、喜びは永遠に続く。悲しみは過ぎ去り、快楽は永遠に続く。苦痛は存在せず、拒絶されるべきものは何もない。我々は義務を負わず、何も持たず、何も求めない"
  },
  {
    "userId": 1,
    "id": 3,
    "title": "ea molestias quasi exercitationem repellat qui ipsa sit aut",
    "body": "et iusto sed quo iurenvoluptatem occaecati omnis eligendi aut adnvoluptatem doloribus vel accusantium quis pariaturnmolestiae porro eius odio et labore et velit aut"
  },
  {
    "userId": 1,
    "id": 4,
    "title": "eum et est occaecati",
    "body": "ullam et saepe reiciendis voluptatem adipiscinsit amet autem assumenda provident rerum culpanquis hic commodi nesciunt rem tenetur doloremque ipsam iurenquis sunt voluptatem rerum illo velit"
  },
  {
    "userId": 1,
    "id": 5,
    "title": "nesciunt quas odio",
    "body": "repudiandae veniam quaerat sunt sednalias aut fugiat sit autem sed estnvoluptatem omnis possimus esse voluptatibus quisnest aut tenetur dolor neque"
  },

<!–

  • GETリクエストとは何か?
    –>

POSTリクエストの作成

データベースに保存される情報をサーバーに送信したい場合、POSTリクエストを使用します。最も一般的な例はソーシャルメディアへの投稿です。以下の例は、APIを使用して新しい投稿を作成するためのPOSTを送信します。

curl -X POST https://jsonplaceholder.typicode.com/posts 
     -H "Content-Type: application/json" 
     -d '{
           "title": "foo",
           "body": "bar",
           "userId": 1
         }'

リクエスト後、実際の投稿オブジェクトがレスポンスとして返されます。

{
  "title": "foo",
  "body": "bar",
  "userId": 1,
  "id": 101
}

詳細なPOSTリクエストの送信方法についてさらに学びたい場合は、こちらのガイドをご覧ください。

PUTリクエストの実行

先ほど学んだように、POSTリクエストはデータベースにオブジェクトを作成するために使用されます。データベースに既に存在するオブジェクトを編集したい場合もあります。既存のオブジェクトを変更するには、PUTリクエストを使用します。以下の例では、以前の投稿本文をbarから 更新されたbarに更新します。

curl -X PUT https://jsonplaceholder.typicode.com/posts/1 
     -H "Content-Type: application/json" 
     -d '{
           "id": 1,
           "title": "foo",
           "body": "updated bar",
           "userId": 1
         }'

実行すると、以下のレスポンスが返されます。投稿本文が更新されたことが確認できます。

{
  "id": 1,
  "title": "foo",
  "body": "updated bar",
  "userId": 1
}

DELETEリクエストの実行

DELETEリクエストの概念は、ここまででほぼ理解できるはずです。DELETEリクエストは、一意の識別子を使用してデータベースから既存のオブジェクトを削除するために使用されます。この場合、識別子(idは1、つまり投稿番号1です。以下のコードは、先ほど作成した投稿を削除します。

curl -X DELETE https://jsonplaceholder.typicode.com/posts/1

ご覧の通り、レスポンスは空のJSONオブジェクトです。投稿は削除されました。

{}

cURLとWeb Unlockerの連携

Web Unlocker Product Page

Web UnlockerとcURLを併用する場合、cURL単体と同様にHTTPリクエストを実行できます。ただしWeb Unlockerはプロキシ機能を提供します。

Web Unlockerでは、世界最高クラスのプロキシを活用したジオターゲティングやCAPTCHAの解決が可能になります。何より、これらのプロキシは自動的に管理されます。プロキシを設定するだけで、普段通り作業を続けられます。

Web Unlockerの設定が完了したら、ユーザー名、ゾーン名、パスワードを必ず保存してください。接続認証に必要です。以下の例では、米国ベースのプロキシを使用する設定を示しています。

curl -i --proxy brd.superproxy.io:33335 --proxy-user brd-customer-<YOUR_USERNAME>-ゾーン-<YOUR_ゾーン_名>-国-us:<YOUR_パスワード> -k "https://geo.brdtest.com/mygeo.json"
  • -i: cURLにレスポンスにヘッダーを含めるよう指示します。デバッグに有用です。
  • --プロキシ brd.superproxy.io:33335 --プロキシ-ユーザー brd-customer-<YOUR_USERNAME>-ゾーン-<YOUR_ゾーン_名>-国-us:<YOUR_パスワード>
    • --proxy brd.superproxy.io:33335: cURLに、brd.superproxy.io:33335にあるプロキシを使用することを指示します。
    • --proxy-user brd-customer-<YOUR_USERNAME>-zone-<YOUR_ZONE_NAME>-country-us:<YOUR_PASSWORD>: これは認証文字列を表します。 認証文字列は<USERNAME>:<PASSWORD> の形式で記述されます。Web Unlocker では、完全なユーザー名は以下のすべてを含みます:brd-customer-<YOUR_USERNAME>-zone-<YOUR_ZONE_NAME>-country-us。
  • k はcURL に SSL 証明書をバイパスするよう指示するために使用されます。Web Unlocker を長期的にご利用になる場合は、こちらから当社の SSL 証明書をダウンロードしてインストールできます。これにより、お使いのマシンが接続を自己認証できるようになります。

以下のサンプル応答をご確認ください。ご覧の通り、ロケーションはニュージャージー州に表示されています。

{"country":"US","asn":{"asnum":20473,"org_name":"AS-VULTR"},"geo":{"city":"Piscataway","region":"NJ","region_name":"New Jersey","postal_code":"08854","latitude":40.5511,"longitude":-74.4606,"tz":"America/New_York","lum_city":"piscataway","lum_region":"nj"}}

Web Unlockerについて詳しく知りたい場合は、当社のAPI Playgroundをご覧ください。様々な言語やHTTPライブラリを使用したAPIリクエストの実験や学習に最適な環境です。プロキシを使用したcURLの活用方法についてはこちらを参照してください。

cURLからどこへ進める?

cURLとHTTPの基礎を理解したら、ほぼあらゆる場面でHTTPを活用できます。一般的なAPIテストにはPostmanやInsomniaなどのGUIツールが便利です。

PythonではRequestsを利用できるほか、Python内部でcURLを使用することも可能です。JavaScriptではNode-FetchAxiosを用いてHTTPリクエストを自動化できます。

コマンドラインツールを使い続けたい場合も、選択肢は豊富です。HTTPie やwgetを検討してみてください。どちらも優れたコマンドラインユーティリティであり、HTTPを非常にうまく扱います。

結論

HTTPクライアントに関して言えば、cURLは何十年もコマンドラインの標準であり、近い将来変わることはないでしょう。開発者であれシステム管理者であれ、基本的なcURLの使用に必要なスキルセットと、HTTPの仕組みに関する十分な理解を得られたはずです。 cURLを使えばファイルのダウンロードやカスタムヘッダーの設定も可能です。Web Unlockerとの連携方法も理解した今、どんな作業でもHTTPを効果的に活用できるでしょう。開発者を目指す方は、ぜひご自身の言語でHTTPの使い方を学んでください。