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

※本サイトにはプロモーション・広告が含まれています。

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

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

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

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

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

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

  • curlとは?基本的な使い方
  • curlのオプションとは?
  • curlの実践的な使い方

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

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

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

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

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

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

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

  • curlとは?
  • curlの基本的な使い方
  • curlが使える場面

curlとは?

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

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

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

  • HTTP
  • HTTPS
  • FTP
  • SFTP

curlの基本的な使い方

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

curl [オプション] [URL]

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

curl https://itc.tokyo

curlが使える場面

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

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

  • ウェブページの取得:ウェブページのHTMLコンテンツを取得
  • APIとの通信:APIに対してHTTPリクエストを送信し、データの取得や更新、削除を行う
  • ファイルのアップロード・ダウンロード:FTP, SFTP, HTTP, HTTPSなどのプロトコルを利用して、ファイルのアップロードやダウンロードを行う
  • ヘッダー情報の確認:ウェブサイトやAPIのHTTPヘッダー情報を確認する
  • 認証付きリクエスト:Basic認証、Digest認証、トークン認証など、さまざまな認証方法に対応したリクエストを送信
  • ウェブサイトの監視:定期的にウェブサイトやAPIにリクエストを送信し、ステータスコードや応答時間を監視
  • リダイレクトの追跡:URLがリダイレクトされる場合、curlを使ってリダイレクト先のURLや遷移を調査
  • プロキシを経由したリクエスト:プロキシサーバーを経由してリクエストを送信

curlのインストール方法

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

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

  • Windowsでのインストール方法
  • macOSでのインストール方法
  • Linuxでのインストール方法

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リクエストの実行方法

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

curl https://itc.tokyo

ヘッダー情報の確認方法

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

curl -I https://itc.tokyo

実践的な使い方

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

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

  • POSTリクエストの送信
  • ファイルのアップロードとダウンロード
  • APIの利用方法
  • PUT/DELETEリクエストの送信

POSTリクエストの送信

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

  • -Xオプション:メソッドを指定(POST)
  • -dオプション:データを指定

具体例は以下のとおり。

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の扱い方
  • パスワード認証の方法
  • トークン認証の方法
  • Basic認証・Digest認証
  • SSL/TLSの設定

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の設定をカスタマイズする場合は、以下のようなオプションを使用します。

  • –ciphers:使用する暗号スイートを指定
  • –cacert:CA証明書のファイルを指定
  • –cert:クライアント証明書を指定
  • –key:クライアント証明書の秘密鍵を指定

プロキシの設定

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

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

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

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

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

  • FTP/SFTPでのファイルアップロード
  • 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活用例
  • Pythonでのcurl活用例
  • Node.jsでのcurl活用例

Bashでのcurl活用例

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

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

手順はこちら。

  • スクリプトを保存:例)script.sh
  • スクリプトに実行権限を付与:例)chmod +x script.sh
  • スクリプトを実行:例)./script.sh

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

エラー: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のオプションを組み合わせることで、さまざまな通信状況に対応した最適化が可能なのです。

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

  • –retry:転送が失敗した場合のリトライ回数を指定
  • –retry-delay:リトライする際の待ち時間を指定
  • –connect-timeout:接続のタイムアウト時間を指定

コード例

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

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

  • 転送速度を50KB/sに制限
  • 圧縮転送をおこない、最大3回のリトライ
  • リトライの間隔は5秒
  • 接続のタイムアウト時間は10秒

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

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

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

  • curlコマンドは、データの送受信ができるコマンド
  • curlのオプションを使えばさまざまなプロトコルが使える
  • curl以外にも言語に適したライブラリが存在する

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

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

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

タイトルとURLをコピーしました