curl|シェル
curl で HTTPS プロトコルを使ってリクエスト
皆さん大好き curl
コマンドの備忘録的な記事になります。
特段何の設定もなく、curl で HTTPS リクエストできました。
curl https://example.com/
curlを実行したときに HTTP リクエストのヘッダーを表示させる
-v
オプションを付与することで、 送信と受信のHTTP
リクエストのヘッダーを出力できます。
$ curl -vI https://example.com/
さらに -I
オプションで、コンテンツのボディは含まずにヘッダーのみを取得しています。 -I
は、指定されたURLに対してHEADリクエストを送信し、レスポンスのヘッダーのみを表示します。
* Trying [64:ff9b::9979:42f3]:443...
...
> HEAD / HTTP/2
> Host: example.com
> User-Agent: curl/8.4.0
> Accept: */*
>
< HTTP/2 200
HTTP/2 200
< server: nginx
server: nginx
< date: Sun, 03 Mar 2024 11:06:59 GMT
date: Sun, 03 Mar 2024 11:06:59 GMT
< content-type: text/html
content-type: text/html
< content-length: 17419
content-length: 17419
< last-modified: Sun, 03 Mar 2024 00:34:27 GMT
last-modified: Sun, 03 Mar 2024 00:34:27 GMT
< etag: "65e3c593-440b"
etag: "65e3c593-440b"
< accept-ranges: bytes
accept-ranges: bytes
curl で POST リクエスト、JSON データの送信
curl
コマンドを使用して POST
リクエストを行い、JSON 配列をボディとして送信する例です。
curl -X POST -H "Content-Type: application/json" -d '[{"key1":"value1"}, {"key2":"value2"}]' http://example.com/endpoint
-d
オプション(または
--data
)を使用して JSON
配列をボディとして含めます。Content-Type
ヘッダーには application/json
を指定します。JSONデータは基本、ダブルクオーテーションで囲みましょう。シングルクオーテーションで囲むと、サーバー側が対応してなくてエラーになる場合があります。
リクエストが長い場合に、途中で切れてトラブルになる
OAuthのBearer認証などで長いトークンを送信する場合は、かならずクオーテーションで囲むようにしましょう。囲まないと長い送信データは途中で切れてしまい、正しいリクエストが行えません。
curl -H POST 'https://example.com/endpoint' -H 'Content-Type: application/json;charset=utf-8' -d '{"id":"1", "name":"jojo"}' -H 'Authorization: Bearer XXXX'
ローカルの画像やCSVファイルをcurlで送信したい
curl
コマンドを使用してローカルのファイル(画像やCSVファイルなど)も送信できます。-F
(または--form
)オプションを使用します。このオプションは、multipart/form-data
形式でファイルをPOSTリクエストとして送信します。
curl -X POST -F "image=@image.png" http://example.com/upload
Webアプリ開発で、フォームのアップローダーを機能をテストするときに便利ですね。
UserAgent を指定したい
curl
でリクエストすると、デフォルトでは
UserAgent が curl/8.4.0
のようになります。これでは
curl
でリクエストしたことがバレバレです(笑)UserAgent を変更するには
-A
オプションを使用します。
curl -A "Chazuke/2.1" https://example.com
Cookie を指定したい
昨今、Cookieの同意を求めるダイアログが、多くのサイトで実装されている世の中です。同意したところで、Cookieに保存されるのでしょうから、Cookieの期限切れやブラウザのキャッシュを削除すればまた同意を求められるという。。煩わしいったらありゃしない。あれって意味あるのでしょうか?
そんなことはさておき、 curl
コマンドでCookieを指定してリクエストを送信するには、-b
(または--cookie
)オプションを使用します。このオプションに続けて、Cookieの名前と値を名前=値
の形式で指定します。複数のCookieを送信する場合は、セミコロン(;
)で区切って指定することができます。
curl -b "username=chazuke; sessionid=123456" https://example.com
この例では、username
とsessionid
という2つのCookieを設定しています。username
の値はchazuke
、sessionid
の値は123456
です。
事前に用意したCookieファイルから読み込むことも可能です。
curl -b cookies.txt https://example.com
jqコマンドと組み合わせて、JSONを読みやすくする
curl
と組み合わせてよく使われるのが、jq
コマンドです。
アプリケーション | インストールコマンド |
---|---|
jq | $ brew install jq |
curl
でリクエスト後に、パイプで標準出力をjq
へ渡してあげます。
$ curl https://apppppp.com/jojo.json | jq
こちらのように JSON データが成形されて見やすく表示されます。
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 43 100 43 0 0 128 0 --:--:-- --:--:-- --:--:-- 128
{
"name": "Jyotaro",
"stand": "The World"
}
jq
コマンドは、ローカルファイルも入力できますから、便利なコマンドですね。
関連記事
- diff(colordiff)|シェル
- dateコマンドで日時の表示 macOS/Linux/Unix
- macOSで学ぶfind・grepの基本テクニック・実用例
- ESP32でHTTPClientを使ってウェブサーバーにGET、POSTするやり方
- iconvコマンドでエンコーディング変換 macOS/Linux/Unix