curlの使用ガイドライン


curlの使用方法ガイド
概要
curlは、Webサーバを要求するためによく使用されるコマンドラインツールです.その名前はクライアントのURLツールの意味です.
コマンドラインパラメータは数十種類に達する強力な機能です.熟練すれば、Postmanのようなグラフィックインタフェースツールに取って代わることができます.
本文はその主なコマンドラインパラメータを紹介し、日常の参考として、簡単に調べることができます.内容は主に《curl cookbook》から翻訳された.紙面を節約するために、次の例は実行時の出力を含まないので、初心者は私が以前書いた『curl初心者チュートリアル』を見てもいいです.
パラメータがない場合、curlはGETリクエストを発行します.

$ curl https://www.example.com

上記のコマンドは、www.example.comにGET要求を発行し、サーバから返されたコンテンツはコマンドラインに出力されます.
-A -Aパラメータは、クライアントのユーザエージェントヘッダ、すなわちUser-Agentを指定する.curlのデフォルトのユーザエージェント文字列はcurl/[version]です.

$ curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' https://google.com

上記のコマンドはUser-AgentをChromeブラウザに変更します.

$ curl -A '' https://google.com

上記のコマンドでは、User-Agentヘッダーが削除されます.-Hパラメータでヘッダーを直接指定し、User-Agentを変更することもできます.

$ curl -H 'User-Agent: php/1.0' https://google.com

-b -bパラメータは、Cookieをサーバに送信するために使用される.

$ curl -b 'foo=bar' https://google.com

上記のコマンドは、ヘッダCookie: foo=barを生成し、fooという値のクッキーをサーバに送信します.

$ curl -b 'foo1=bar;foo2=bar2' https://google.com

上のコマンドは2つのCookieを送信します.

$ curl -b cookies.txt https://www.google.com

上記のコマンドは、ローカルファイルbarを読み込み、サーバが設定したCookie(cookies.txtパラメータを参照)をサーバに送信します.
-c -cパラメータは、サーバが設定したCookieをファイルに書き込みます.

$ curl -c cookies.txt https://www.google.com

上記のコマンドは、サーバのHTTP応答に設定されたCookieをテキストファイル-cに書き込む.
-d cookies.txtパラメータは、POST要求を送信するためのデータボディである.

$ curl -d'login=emma&password=123'-X POST https://google.com/login
#   
$ curl -d 'login=emma' -d 'password=123' -X POST  https://google.com/login
-dパラメータを使用すると、HTTPリクエストに自動的にヘッダ-dが追加されます.また、要求は自動的にPOSTメソッドに移行するので、Content-Type : application/x-www-form-urlencodedを省略することができる.-X POSTパラメータは、ローカルテキストファイルのデータを読み出し、サーバに送信することができる.

$ curl -d '@data.txt' https://google.com/login

上記コマンドは、-dファイルの内容を読み出し、データ体としてサーバに送信します.
--data-urlencode data.txtパラメータは--data-urlencodeと同等であり、POST要求を送信するデータ体は、送信したデータを自動的にURL符号化することを区別する.

$ curl --data-urlencode 'comment=hello world' https://google.com/login

上記のコードでは、送信されたデータ-dの間にスペースがあり、URL符号化が必要です.
-e hello worldパラメータは、要求のソースを示すHTTPのヘッダ-eを設定するために使用される.

curl -e 'https://google.com?q=example' https://www.example.com

上記のコマンドは、RefererヘッダをRefererに設定します.https://google.com?q=exampleパラメータは、ヘッダ-Hを直接追加することによって、同様の効果を達成することができる.

curl -H 'Referer: https://google.com?q=example' https://www.example.com

-F Refererパラメータは、サーバにバイナリファイルをアップロードするために使用されます.

$ curl -F '[email protected]' https://google.com/profile

上記のコマンドは、HTTPリクエストにヘッダ-Fを追加し、ファイルContent-Type: multipart/form-dataphoto.pngフィールドとしてアップロードします.fileパラメータは、MIMEタイプを指定することができる.

$ curl -F '[email protected];type=image/png' https://google.com/profile

上記のコマンドは、MIMEタイプが-Fであることを指定します.そうしないと、curlはMIMEタイプをimage/pngに設定します.application/octet-streamパラメータは、ファイル名を指定することもできます.

$ curl -F '[email protected];filename=me.png' https://google.com/profile

上記のコマンドでは、元のファイル名は-Fですが、サーバが受信したファイル名はphoto.pngです.
-G me.pngパラメータは、URLのクエリ文字列を構築するために使用されます.

$ curl -G -d 'q=kitties' -d 'count=20' https://google.com/search

上記のコマンドはGETリクエストを発行し、実際にリクエストされたURLは-Gです.https://google.com/search?q=kitties&count=20を省略すると、POST要求が発行されます.
データがURL符号化を必要とする場合、--Gパラメータを組み合わせることができる.

$ curl -G --data-urlencode 'comment=hello world' https://www.example.com

-H --data--urlencodeパラメータは、HTTP要求のヘッダを追加する.

$ curl -H 'Accept-Language: en-US' https://google.com

上のコマンドは、HTTPヘッダ-Hを追加します.

$ curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' https://google.com

上のコマンドは、2つのHTTPヘッダを追加します.

$ curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://google.com/login

上記のコマンドでHTTPリクエストを追加するヘッダはAccept-Language: en-USであり、その後、Content-Type: application/jsonパラメータでJSONデータを送信する.
-i -dパラメータは、サーバ応答のHTTPヘッダを印刷する.

$ curl -i https://www.example.com

上のコマンドは、サーバ応答を受信した後、サーバ応答のヘッダを出力し、行を空にしてから、Webページのソースコードを出力します.
-I -iパラメータは、サーバにHEAD要求を発行するが、サーバから返されたHTTPヘッダが印刷される.

$ curl -I https://www.example.com

上のコマンドは、HEADリクエストに対するサーバの応答を出力します.-Iパラメータは--headに等しい.

$ curl --head https://www.example.com

-k -Iパラメータは、SSL検出をスキップすることを指定する.

$ curl -k https://www.example.com

上記のコマンドでは、サーバのSSL証明書が正しいかどうかは確認されません.
-L -kパラメータは、HTTP要求をサーバのリダイレクトに追従させる.curlはデフォルトでリダイレクトに従いません.

$ curl -L -d 'tweet=hi' https://api.twitter.com/tweet

--limit-rate -Lは、HTTP要求および応答の帯域幅を制限し、遅いネットワーク速度の環境をシミュレートするために使用される.

$ curl --limit-rate 200k https://google.com

上記のコマンドは、帯域幅を毎秒200 Kバイトに制限します.
-o --limit-rateパラメータは、サーバの応答をファイルに保存し、-oコマンドに等しい.

$ curl -o example.html https://www.example.com

上記のコマンドは、wgetwww.example.comに保存します.
-O example.htmlパラメータは、サーバ応答をファイルに保存し、URLの最後の部分をファイル名とする.

$ curl -O https://www.example.com/foo/bar.html

上記のコマンドは、サーバ応答を-Oというファイルに保存します.
-s bar.htmlパラメータは、エラーおよび進捗情報を出力しません.

$ curl -s https://www.example.com

上記のコマンドでエラーが発生した場合、エラーメッセージは表示されません.エラーが発生しなければ、正常に運転結果が表示されます.
curlに出力を発生させないようにするには、次のコマンドを使用します.

$ curl -s -o /dev/null https://google.com

-S -sパラメータは、エラー情報のみを出力することを指定し、通常は-Sとともに使用される.

$ curl -s -o /dev/null https://google.com

エラーが発生しない限り、上記のコマンドには出力がありません.
-u -sパラメータは、サーバ認証のユーザー名とパスワードを設定するために使用されます.

$ curl -u 'bob:12345' https://google.com/login

上のコマンドでは、ユーザー名を-u、パスワードをbobに設定し、HTTPヘッダ12345に変更します.
curlはURLの中のユーザー名とパスワードを識別することができます.

$ curl https://bob:[email protected]/login

上記コマンドはURL内のユーザ名とパスワードを認識して、前の例のHTTPヘッダに変換します.

$ curl -u 'bob' https://google.com/login

上のコマンドはユーザー名のみを設定し、実行するとcurlはユーザーにパスワードの入力を要求します.
-v Authorization: Basic Ym9iOjEyMzQ1パラメータは、通信をデバッグするためのプロセス全体を出力する.

$ curl -v https://www.example.com
-vパラメータは、デバッグにも使用でき、元のバイナリデータも出力されます.

$ curl --trace - https://www.example.com

-x --traceパラメータは、HTTP要求のプロキシを指定します.

$ curl -x socks5://james:[email protected]:8080 https://www.example.com

上記のコマンドは、HTTPリクエストが-xのsocks 5エージェントを介して発行されることを指定します.
プロキシプロトコルが指定されていない場合、デフォルトはHTTPです.

$ curl -x james:[email protected]:8080 https://www.example.com

上記のコマンドでは、要求されたエージェントはHTTPプロトコルを使用します.
-X myproxy.com:8080パラメータは、HTTPリクエストのメソッドを指定します.

$ curl -X POST https://www.example.com

上記のコマンドは、-Xに対してPOST要求を発行する.