curl
curlコマンドとは、FTPやHTTP、HTTPSなどのさまざまな通信プロトコルでデータを送信および受信するコマンドラインツールです。このページでは、curlコマンドの使い方をご紹介します。
構文
curl [options] URL...
オプション一覧
curlコマンドには次に示すオプションを指定できる。
- -#
- --progrss-bar
- 進捗状況を表示する。
- -1
- --tlsv1
- TLSバージョン1.xを使ってネゴシエーションする。
- -2
- --sslv2
- SSLバージョン2を使ってネゴシエーションする。
- -3
- --sslv3
- SSLバージョン3を使ってネゴシエーションする。
- --connect-timeout seconds
- 最大接続時間をsecondsで指定した時間(秒単位)に制限する。
- -G
- --get
- HTTPリクエストをGETメソッドで送信する。
$ curl -G "https://segakuin.com/php/get.php?user=tsuka&passwd=mellon"
- -o filename
- 取得したデータをfilenameで指定したファイルに保存する。
- -S
- エラーが発生したときにエラーメッセージを表示する。 (POSIX)
$ curl -fsSL https://install.julialang.org | sh
- --show-error
- エラーが発生したときにエラーメッセージを表示する。 (GNU)
- -s
- 進捗メーターを表示しない。 (POSIX)
$ curl -fsSL https://install.julialang.org | sh
- --silent
- 進捗メーターを表示しない。 (GNU)
- --ssl
- 接続時にSSL/TLSの利用を試みる。
- --retry num
- エラーになった場合、numで指定した回数だけ再試行する。
- -T filename
- --upload-file filename
- filenameで指定したファイルをアップロードする。
- -u user:password
- --user user:password
- ユーザ名とパスワードを指定する。basic認証やFTPプロトコルのときに利用する。
- --url URL
- URLで指定したURLにアクセスする。
- -v
- --verbose
- リクエストとレスポンスを表示する。
$ curl -v https://segakuin.com/
HTTP
HTTP プロトコルでリクエストを送信する場合、次に示すオプションを curl コマンドに指定できる。
- -d param
- --data param
- HTTPリクエストをPOSTメソッドで送信する。paramにはリクエストパラメータを「"name"="value"」の形式で指定する。
$ curl -d "user=tsuka&passwd=mellon" https://segakuin.com/php/post.php
- --digest
- ダイジェスト認証を有効にする。
-f
- サーバー・エラーが発生した場合に、サーバーが返すHTTPレスポンス・メッセージを出力しない。 (POSIX)
$ curl -fsSL https://install.julialang.org | sh
--fail
- サーバー・エラーが発生した場合に、サーバーが返すHTTPレスポンス・メッセージを出力しない。 (GNU)
- -H
- --header
- サーバへHTTPを送信するときに、リクエストに含める追加ヘッダを指定する。
一部のリクエストヘッダには専用のオプションが用意されている。
HTTP request header |
curlコマンド オプション |
User-Agent |
-A --user-agent |
Referer |
-e --referer |
Cookie |
-b --cookie |
$ curl --header 'Content-Typ:text/xml' http://example.com/
- -0
- --http1.0
- HTTP 1.0でリクエストする。
$ curl --http1.0 https://segakuin.com
- --http1.1
- HTTP 1.1でリクエストする。(デフォルト)
$ curl --http1.1 https://segakuin.com
- --http2
- HTTP 2でリクエストする。
$ curl --http2 https://segakuin.com
- -L
- 要求したページが移転したことをサーバが返したら、移転先に再度リクエストを送信する。 (POSIX)
$ curl -fsSL https://install.julialang.org | sh
- --location
- 要求したページが移転したことをサーバが返したら、移転先に再度リクエストを送信する。 (GNU)
FTP
FTP プロトコルでリクエストを送信する場合、次に示すオプションを curl コマンドに指定できる。
-a
--append
- ファイルをアップロードするときに、既存のファイルが存在する場合、ファイルを上書きするのではなく、ファイルの末尾に追加する。
--ftp-create-dirs
- 接続時に必要に応じてディレクトリを作成する。
--ftp-pasv
- パッシブモードを使用する。
ディレクトリ内のファイル一覧を確認する。
$ curl -u tsukamoto:mellon ftp://sales/user/tsukamoto
ファイルの中身を標準出力へ出力する。
$ curl -u tsukamoto:mellon ftp://sales/user/tsukamoto/example.txt
Microsoft Windws
Microsoft Windows の PowerShell でも curl コマンドを利用できる。ただし、Microsoft Windows には次に示す2種類の curl コマンドがある。
curl
Microsoft Windows の PowerShell における curl コマンドは、Invoke-WebRequest コマンドレットのエイリアスである。
curl.exe
次に示すオプションを curl.exe コマンドに指定できる。
- -d data
- --data data
- HTTPリクエストをPOSTメソッドで送信する。
- -s
- --silent
- サイレントモード
- -u user:password
- --user user:password
- ユーザ名とパスワードを指定する。basic認証やFTPプロトコルのときに利用する。
- -v
- --verbose
- 冗長モードでコマンドを実行する。
- -V
- --version
- バージョンを表示してコマンドを終了する。
戻り値の一覧
curlコマンドは次に示す戻り値を返す。
- 0
- 成功
- 1
- サポートされていないプロトコルです。このビルドのcurlは、このプロトコルをサポートしていません。
- 2
- 初期化に失敗しました。
- 3
- URLが不正です。構文が正しくありません。
- 4
- 目的のリクエストを実行するために必要な機能またはオプションが有効になっていないか、ビルド時に明示的に無効になっています。
- 5
- プロキシを解決できませんでした。指定されたプロキシホストを解決できませんでした。
- 6
- ホストを解決できませんでした。指定されたリモートホストは解決されませんでした。
- 7
- ホストへの接続に失敗しました。
- 8
- サーバーの応答が変です。サーバーはcurlが解析できないデータを送りました。
- 9
- FTPアクセスが拒否されました。サーバーがログインを拒否したか、特定のリソースまたはディレクトリへのアクセスを拒否しました。多くの場合、サーバーに存在しないディレクトリに変更しようとしたことが原因です。
- 10
- FTP accept に失敗しました。アクティブなFTPセッションを使用しているときに、サーバーのコネクションバックを待っている間に制御接続などでエラーコードが送信されました。
- 11
- CurlはPASSリクエストに送られたリプライをパースすることができませんでした。
- 12
- アクティブなFTPセッションでサーバーがcurlに接続し直すのを待つ間に、タイムアウトが切れました。
- 13
- PASV要求に対する応答をCurlが解釈できませんでした。
- 14
- Curlはサーバーが送った227行をパースできませんでした。
- 15
- FTPはホストを取得できません。227行目で取得したホストIPを解決できませんでした。
- 16
- HTTP/2エラーです。 HTTP2 フレームレイヤに問題が検出されました。
- 17
- FTPはバイナリに設定できませんでした。転送方式をバイナリに変更できませんでした。
- 18
- ファイルの一部分のみを転送しました。
- 19
- FTPは与えられたファイルをダウンロード/アクセスできず、RETR(または類似の)コマンドは失敗しました。
- 21
- FTP引用エラー。引用コマンドがサーバーからエラーを返しました。
- 22
- HTTP ページが取得されませんでした。要求されたURLが見つからないか、HTTPエラーコードが400以上の別のエラーが返されました。この戻り値は、-f, --fail が使用されている場合のみ表示されます。
- 23
- 書き込みエラーです。Curlはローカルファイルシステムなどにデータを書き込むことができませんでした。
- 25
- FTPでファイルをSTORできませんでした。FTPアップロードに使用されるSTOR操作がサーバーに拒否されました。
- 26
- 読み取りエラーです。さまざまな読み取りトラブル。
- 27
- メモリ不足です。メモリ確保要求に失敗しました。
- 28
- 動作タイムアウト。条件により指定されたタイムアウト時間に達しました。
- 30
- FTP PORTに失敗しました。 PORTコマンドに失敗しました。すべてのFTPサーバーがPORTコマンドをサポートしているわけではありません。 PASVを使用して転送してみてください。
- 31
- FTPはRESTを使用することができませんでした。RESTコマンドは失敗しました。このコマンドは再開したFTP転送に使用されます。
- 33
- HTTP範囲エラー。範囲 "command "は機能しませんでした。
- 34
- HTTPポストエラーです。内部ポストリクエストの生成エラーです。
- 35
- SSL接続エラー。SSLハンドシェイクに失敗しました。
- 36
- ダウンロードの再開に失敗しました。以前に中断されたダウンロードを継続できませんでした。
- 37
- FILEはファイルを読めませんでした。ファイルを開くのに失敗しました。
- 38
- LDAPはバインドできません。LDAPのバインド操作に失敗しました。
- 39
- LDAP検索に失敗しました。
- 41
- 必要なLDAP関数が見つかりませんでした。
- 42
- コールバックにより中止されました。アプリケーションからcurlに操作の中止を指示されました
- 43
- 内部エラーです。ある関数が不正なパラメータで呼び出されました。
- 45
- インターフェースエラーです。指定された送信インタフェースは使用できませんでした。
- 47
- リダイレクトが多すぎる。リダイレクトをたどると、curlが最大量にヒットする。
- 48
- libcurlに指定されたオプションが不明です。これは、あなたが奇妙なオプションをcurlに渡し、それがlibcurlに渡され、拒否されたことを示します。
- 49
- telnetオプションが不正です。
- 51
- 相手のSSL証明書またはSSH MD5フィンガープリントに問題があった。
- 52
- サーバーから何も応答がないので、ここではエラーと見なされる。
- 53
- SSL暗号化エンジンが見つかりません。
- 54
- SSL暗号化エンジンをデフォルトに設定できない。
- 55
- ネットワークデータの送信に失敗しました。
- 56
- ネットワークデータの受信に失敗した。
- 58
- ローカル証明書に問題があります。
- 59
- 指定されたSSL暗号を使用できませんでした。
- 60
- ピア証明書は、既知のCA証明書では認証できません。
- 61
- 転送エンコーディングが認識できません。
- 62
- LDAPのURLが無効です。
- 63
- 最大ファイルサイズを超えました。
- 64
- 要求された FTP SSL レベルに失敗しました。
- 65
- データの送信には、失敗した巻き戻しが必要です。
- 66
- SSLエンジンの初期化に失敗しました。
- 67
- ユーザー名、パスワード、またはそれに類するものが受け入れられず、curlはログインに失敗しました。
- 68
- TFTPサーバーにファイルが見当たりません。
- 69
- TFTPサーバーのパーミッションに問題があります。
- 70
- TFTPサーバーのディスク容量が不足しています。
- 71
- 不正なTFTP操作です。
- 72
- TFTP転送IDが不明です。
- 73
- ファイルが既に存在します(TFTP)。
- 74
- そのようなユーザーはいません(TFTP)。
- 75
- 文字変換に失敗しました。
- 76
- 文字変換機能が必要です。
- 77
- SSL CA証明書の読み込みに問題があります。
- 78
- URLで参照されているリソースが存在しません。
- 79
- SSHセッション中に不特定のエラーが発生しました。
- 80
- SSL接続のシャットダウンに失敗しました。
- 82
- CRLファイルを読み込めませんでした、見つからないか間違った形式です。
- 83
- 発行者チェックに失敗しました。
- 84
- FTP PRETコマンドに失敗しました。
- 85
- RTSP:CSeq番号の不一致
- 86
- RTSP:セッション識別子の不一致
- 87
- FTPファイルリストの解析ができません。
- 88
- FTPチャンクコールバックが報告したエラー
- 89
- 接続ができないため、セッションはキューに入れられます。
- 90
- SSL公開鍵がPinned公開鍵と一致しません。
- 91
- SSL証明書のステータスが無効です。
- 92
- HTTP/2フレームレイヤのストリームエラー
EDINET
金融庁の電子開示システム「EDINET」のWeb APIを使って、有価証券報告書の提出書類一覧及びメタデータを取得する。
$ curl https://disclosure.edinet-fsa.go.jp/api/v1/documents.json?date=2022-01-14
{
"metadata":
{
"title": "提出された書類を把握するためのAPI",
"parameter":
{
"date": "2022-01-14",
"type": "1"
},
"resultset":
{
"count": 842
},
"processDateTime": "2022-01-16 00:02",
"status": "200",
"message": "OK"
}
}
気象庁の天気予報
気象庁の天気予報APIを使って、週間の天気概況を取得する。
$ curl https://www.jma.go.jp/bosai/forecast/data/overview_week/130000.json
{
"publishingOffice":"気象庁",
"reportDatetime":"2022-01-16T10:35:00+09:00",
"headTitle":"関東甲信地方週間天気予報",
"text":"予報期間 1月17日から1月23日まで\n
向こう一週間は、高気圧に覆われて晴れる日が多いでしょう。長野県北部と群馬県北部は、気圧の谷や寒気の影響で雲が広がりやすく、期間の中頃にかけて雪の降る日が多い見込みです。\n
最高気温と最低気温はともに、平年並か平年より低く、かなり低い所もあるでしょう。\n
降水量は、平年並か平年より少ない見込みです。"
}
※見やすさのために改行を入れている。実際には改行は入らない。
関連記事
Pythonから金融庁のEDINET APIを使って有価証券報告書を取得する
JuliaのHTTP.jlパッケージ
参考文献
金融庁(2021)EDINET