(最終更新月:2023年4月)
✔当記事はこのような方に向けて書かれています
「curlコマンドって何だろうか?」
「curlを使ってリクエストを送る方法が知りたい」
「curlでできることをできるだけたくさん教えてほしい」
✔当記事の主な内容は以下のとおり
- curlとは?基本的な使い方
- curlのオプションとは?
- curlの実践的な使い方
当記事では、curlについての基本はもちろん、curlのオプションを使いながら具体的な使用例など、初心者にもわかりやすいよう解説しています。
ぜひ最後までご覧ください。
curlコマンドの使用例を動画でもご覧ください。
curlコマンド概略
— ITC (@ITC202012) September 12, 2023
※https://t.co/N9cGweQF2Iは任意のアドレスへ変更してください。
1. GETリクエスト
curl https://t.co/WpBU2VIYWy
2. ヘッダー情報を取得
curl -I https://t.co/WpBU2VIYWy
3. POSTリクエスト
curl -X POST -d "key=value" https://t.co/li7CH0Ks37
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の実行ファイルがあるディレクトリを追加して完了です。
手順はこちら。
- curlがインストールされているディレクトリを確認(例:
C:\tools\curl
など。) - スタートメニュー > 「コントロールパネル」を検索し、開く
- 「システムとセキュリティ」カテゴリをクリック
- 「システム」をクリック
- 左側のメニューで「システムの詳細設定」をクリック
- 「システムのプロパティ」 > 「環境変数」ボタンをクリック
- 「環境変数」 > 下部の「システム環境変数」で「Path」変数を選択 >「編集」ボタンをクリック
- 「環境変数の編集」>「新規」> curlの実行ファイルがあるディレクトリ(例:
C:\tools\curl
)を入力し、「OK」 - すべてのウィンドウで「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 , --data | POSTリクエストで送信するデータを指定します。 | 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 , --insecure | SSL/TLS認証を無視します。 | curl -k https://example.com |
-L , --location | リダイレクト先に追従します。 | curl -L https://example.com |
-o , --output | 取得したデータをファイルに保存します。 | curl -o output.html https://example.com |
-O , --remote-name | URLのファイル名でファイルを保存します。 | 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 , --request | HTTPメソッド(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コマンドはサーバーから送信される証明書を検証しなくなり、以下のような動作をします。
- 証明書エラーが発生しなくなる
- サーバーとの通信が脆弱になる
- サーバーからのレスポンスが改ざんされている可能性がある
パスワード認証の方法
ユーザー名とパスワードを指定して認証が必要なサイトにアクセスするには、-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が機能しているかやどんなレスポンスが返ってくるかが簡単に見れるのです。
マスターして上手く活用してください。