サイトアイコン ITC Media

【完全ガイド】curlコマンドの基本から実践的な使い方を徹底解説

(最終更新月:2023年4月)

✔当記事はこのような方に向けて書かれています

「curlコマンドって何だろうか?」

「curlを使ってリクエストを送る方法が知りたい」

「curlでできることをできるだけたくさん教えてほしい」

✔当記事の主な内容は以下のとおり

当記事では、curlについての基本はもちろん、curlのオプションを使いながら具体的な使用例など、初心者にもわかりやすいよう解説しています。

ぜひ最後までご覧ください。

curlコマンドの使用例を動画でもご覧ください。

curlでおさえておきたい基本

curlでおさえておきたい基本について見ていきましょう。

まずは基本をおさえたうえで、具体例などに進んでください。

curlとは?

curlコマンドはインターネット上の情報を取得したり、送信したりするための道具のようなもの。

コマンドラインからインターネット上のリソースにアクセスし、データの送受信をおこなえるツールです。

主に以下のようなプロトコル(通信をおこなううえでのルール)をサポートし、APIとの通信やウェブページの取得、ファイルのアップロード・ダウンロードなどの操作が可能。

curlの基本的な使い方

curlの基本的な使い方は、次のようになります。

curl [オプション] [URL]

例えば、GoogleのホームページのHTMLを取得するには以下のように実行します。

curl https://itc.tokyo

curlが使える場面

curlが使える場面を見ていきます。

思ってもいないところでcurlが役立つこともあるでしょう。

curlのインストール方法

curlのインストール方法も確認しておきましょう。

まだ自身のPCにインストールしていない方は、OSに合ったやり方でインストールが必要です。

Windowsでのインストール方法

Windowsでcurlをインストールするには、公式サイト(https://curl.se/windows/)からダウンロードして、適切なディレクトリに展開します。

PATH環境変数にcurlの実行ファイルがあるディレクトリを追加して完了です。

手順はこちら。

  1. curlがインストールされているディレクトリを確認(例:C:\tools\curl など。)
  2. スタートメニュー > 「コントロールパネル」を検索し、開く
  3. 「システムとセキュリティ」カテゴリをクリック
  4. 「システム」をクリック
  5. 左側のメニューで「システムの詳細設定」をクリック
  6. 「システムのプロパティ」 > 「環境変数」ボタンをクリック
  7. 「環境変数」 > 下部の「システム環境変数」で「Path」変数を選択 >「編集」ボタンをクリック
  8. 「環境変数の編集」>「新規」> curlの実行ファイルがあるディレクトリ(例:C:\tools\curl)を入力し、「OK」
  9. すべてのウィンドウで「OK」ボタンをクリックして閉じる

これで、PATH環境変数にcurlの実行ファイルがあるディレクトリが追加されました。

コマンドプロンプトやPowerShellを開いてcurlコマンドを実行し使えればOKです。

macOSでのインストール方法

macOSにはcurlが標準でインストールされています。

アップデートが必要な場合は、Homebrew(https://brew.sh/)を利用してインストール・アップデートをおこないます。

Linuxでのインストール方法

Linuxディストリビューションによっては、curlがすでにインストールされている場合があります。

インストールが必要な場合は、パッケージ管理ツール(apt、yumなど)を使ってインストールします。

curlの基本操作

curlの基本操作として、以下の方法を見ていきます。

シンプルなGETリクエストの実行方法

GETリクエストは、以下のように実行します。

curl https://itc.tokyo

ヘッダー情報の確認方法

ヘッダー情報だけを表示するには、-I(大文字のアイ)オプションを使用します。

curl -I https://itc.tokyo

実践的な使い方

より実践で使える方法をご紹介します。

うえの方法と合わせて知っておきましょう。

POSTリクエストの送信

POSTリクエストを送信するには、以下2つのオプションを使います。

具体例は以下のとおり。

curl -X POST -d "key=value" https://example.com/api/resource

ファイルのアップロードとダウンロード

ファイルをアップロードするには、-Fオプションを使用。

curl -F "file=@file.txt" https://example.com/upload

ファイルをダウンロードするには、-oオプションで保存先ファイル名を指定します。

curl -o output.html https://example.com

ファイルのダウンロードには、「wgetコマンド」も使えます。

詳しく知りたい方は、こちらの記事「wgetコマンドについて」もどうぞ。

APIの利用方法

APIにリクエストを送るには、APIのエンドポイントと認証情報(APIキーなど)を指定し、curlコマンドを実行します。

例えば、APIキーをヘッダーに含めてGETリクエストを送信する場合は以下のようになります。

curl -H “Authorization: Bearer YOUR_API_KEY” https://api.example.com/data

PUT/DELETEリクエストの送信

PUTリクエストやDELETEリクエストを送信するには、-Xオプションでメソッドを指定。

#put
curl -X PUT -d "key=value" https://example.com/api/resource

#delete
curl -X DELETE https://example.com/api/resource

PUTメソッドは、Webアプリケーションでのファイルのアップロードや、APIでのデータの更新などに利用されます。

curlのオプション一覧

curlのオプションについて、一覧をご紹介します。

概要と実例が載っているので、どんなことができるのかを理解するために目を通しておきましょう。

オプション概要実例
-A, --user-agentユーザーエージェントを指定します。curl -A "Mozilla/5.0" https://example.com
-b, --cookieクッキーを指定します。curl -b "name=value" https://example.com
-c, --cookie-jar取得したクッキーをファイルに保存します。curl -c cookies.txt https://example.com
-d, --dataPOSTリクエストで送信するデータを指定します。curl -d "data=value" https://example.com
-D, --dump-headerレスポンスヘッダーをファイルに保存します。curl -D headers.txt https://example.com
-F, --formフォームデータを送信します。curl -F "file=@file.txt" https://example.com
-H, --headerカスタムヘッダーを追加します。curl -H "Content-Type: application/json" https://example.com
-I, --headヘッダー情報のみを表示します。curl -I https://example.com
-k, --insecureSSL/TLS認証を無視します。curl -k https://example.com
-L, --locationリダイレクト先に追従します。curl -L https://example.com
-o, --output取得したデータをファイルに保存します。curl -o output.html https://example.com
-O, --remote-nameURLのファイル名でファイルを保存します。curl -O https://example.com/file.zip
-s, --silentサイレントモードを有効にします。curl -s https://example.com
-u, --userユーザー名とパスワードを指定して認証を行います。curl -u username:password https://example.com
-x, --proxyプロキシサーバーを指定します。curl -x http://proxy.example.com:8080 https://example.com
-X, --requestHTTPメソッド(GET, POST, PUT, DELETE)POSTリクエスト音送信
curl -X POST -d “data=value” https://example.com
PUTリクエストの送信
curl -X PUT -d “data=new_value” https://example.com/resource/1
DELETEリクエストの送信
curl -X DELETE https://example.com/resource/1

セキュリティと認証

curlコマンドにおけるセキュリティと認証についても見ていきます。

単純なコマンドだけで、情報を取得できない場合があるのです。

HTTPSの扱い方

HTTPS接続を使用するには、URLにhttps://を指定

証明書のエラーを無視する場合は、-kオプションを使用します。

-kオプションにより、curlコマンドはサーバーから送信される証明書を検証しなくなり、以下のような動作をします。

  1. 証明書エラーが発生しなくなる
  2. サーバーとの通信が脆弱になる
  3. サーバーからのレスポンスが改ざんされている可能性がある

パスワード認証の方法

ユーザー名とパスワードを指定して認証が必要なサイトにアクセスするには、-uオプションを使用します。

curl -u username:password https://example.com/secure

トークン認証の方法

トークン認証を使用するAPIにアクセスする場合は、ヘッダーにトークンを追加してリクエストを送信します。

curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" https://api.example.com/data

Basic認証・Digest認証

Basic認証やDigest認証を使用する場合は、-uオプションでユーザー名とパスワードを指定し、必要に応じて–basicや–digestオプションを使用します。

#Basic認証
curl -u username:password --basic https://example.com/basic_auth

#Digest認証
curl -u username:password --digest https://example.com/digest_auth

SSL/TLSの設定

SSL/TLSの設定をカスタマイズする場合は、以下のようなオプションを使用します。

プロキシの設定

プロキシ経由でリクエストを送信する場合は、-xオプションでプロキシサーバーのアドレスを指定します。

curl -x http://proxy.example.com:8080 https://example.com

ファイル転送とダウンロード

ファイルを扱う方法についても見ていきます。

FTP・SFTPプロトコルを使う方法です。

FTP/SFTPでのファイルアップロード

FTPやSFTPを使用してファイルをアップロードする場合は、以下のように実行します。

#FTP
curl -u username:password -T itc.txt ftp://ftp.example.com/path/

#SFTP
curl -u username:password -T itc.txt sftp://sftp.example.com/path/

FTP/SFTPでのファイルダウンロード

FTPやSFTPを使用してファイルをダウンロードする場合は、以下のように実行します。

#FTPダウンロード
curl -u username:password -o itc.txt ftp://ftp.example.com/path/itc.txt

#SFTPダウンロード
curl -u username:password -o itc.txt sftp://sftp.example.com/path/itc.txt

一括ダウンロードの方法

複数のファイルを一括でダウンロードする場合は、-Oオプションを使用し、複数のURLを指定します。

curl -O https://example.com/itc.txt -O https://example.com/itc2.txt

curlを活用したスクリプト

curlを活用したスクリプトをご紹介します。

具体的にプログラミング言語によるスクリプトを見れば、イメージがわくという方も多いはず。

Bashでのcurl活用例

Bashスクリプトでcurlを利用する場合は、以下のように実行します。

#!/bin/bash
response=$(curl -s https://api.example.com/data)
echo "API response: $response"

手順はこちら。

Pythonでのcurl活用例

Pythonでcurlコマンドを実行するには、subprocessモジュールを使用します。

import subprocess
response = subprocess.check_output(["curl", "-s", "https://api.example.com/data"])
print("API response:", response.decode("utf-8"))

Pythonファイルを実行する際はターミナルで以下のようにします。

python ファイル名(例:script.pyなど)

ただしPythonでHTTPリクエストを送信する場合は、専用のライブラリ(requests, http.client, urllibなど)を利用することが推奨されます。

詳しくはこちら。

Node.jsでのcurl活用例

Node.jsでcurlコマンドを実行するには、child_processモジュールを使用します。

const { exec } = require("child_process");
exec("curl -s https://api.example.com/data", (error, response) => {
  if (error) {
    console.error(`Error: ${error}`);
    return;
  }
  console.log("API response:", response);
});

Node.jsでHTTPリクエストを送信する場合は、専用のライブラリ(axios, node-fetch, httpモジュールなど)を利用することが推奨されます。

curlでのトラブルシューティング

curlのトラブルシューティングについても事前に目を通しておきましょう。

起こるトラブルは大抵の場合は以下のとおりだからです。

よくあるエラーと対処法

よくあるエラーを以下のとおりまとめました。

エラー:curl: (6) Could not resolve host: example.com

対処法としては以下のとおり。

エラー:curl: (7) Failed to connect to example.com port 80: Connection refused

対処法は、ポート番号が正しいか確認し、サーバーが稼働しているかをチェックすること。

エラー:curl: (28) Operation timed out after 30000 milliseconds with 0 bytes received

タイムアウト時間を延ばすか、サーバーの応答速度を改善し、エラー解決を計りましょう。

タイムアウトの設定

リクエストのタイムアウトを設定するには、-mオプションを使用し、秒数を指定します。

curl -m 10 https://example.com

通信速度の最適化

通信速度を最適化する方法を見ていきます。

curlのオプションを組み合わせることで、さまざまな通信状況に対応した最適化が可能なのです。

例えば、低速な回線で大量のデータをダウンロードする際には、以下のようなオプションを活用できます。

コード例

curl --limit-rate 50K --compressed --retry 3 --retry-delay 5 --connect-timeout 10 https://example.com

このコマンドでの設定は以下のとおり。

curlのオプションを組み合わせると、通信速度を最適化し、効率的なデータ転送を実現できるのです。

まとめ:curlを使いこなして、ターミナルから通信をしてみよう

当記事の内容をまとめます。

curlコマンドは、手軽にAPIのレスポンスを確かめられる便利なコマンドです。

使用したいAPIが機能しているかやどんなレスポンスが返ってくるかが簡単に見れるのです。

マスターして上手く活用してください。

モバイルバージョンを終了