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 WindowsPowerShell でも 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