curlコマンドについて
curl(主にコマンド)について記事を書こうと思います。
読み方については「シーユーアールエル」と「カール」があるのですが
「カール」が正しいようです。
curl自体の説明は色んな方がされているので
使用頻度が高いであろうコマンドをメインに、備忘録も兼ねてまとめてみました。
curlとは
様々な通信プロトコルをサポートし、リクエストを送信することが可能です。
有名どころでいうとこんな感じ
FTP, HTTP, HTTPS, IMAP, LDAP, POP3, SCP, SFTP, SMB, SMTP, Telnet
公式HP:https://curl.se
メールの送受信できるのは知らなったです!
ただ現状、使うことは無さそうなので、ここまでに。
使い方
基本的なコマンドはこちらになります。
curl [option(long option)※複数可] [対象URL]
例)
curl -v https://example.com
curl --verbose GET https://example.com
主なオプション一覧
option | long option | 機能 |
---|---|---|
-o | --output | 指定ファイルに標準出力内容を保存 |
-v | --verbose | リクエスト、レスポンスのヘッダ情報表示 |
-A | --user-agent | ユーザーエージェントを設定 |
-u | --user | ベーシック認証情報を設定 |
-H | --header | リクエストヘッダに情報を追加/更新 |
-X | --request | リクエストメソッドを設定 ※デフォルト(未指定の場合)はGETになる |
-d | --data | POSTリクエストのパラメータを設定 ※リクエストも自動的にPOSTになるので-Xの指定は不要 |
-F | --form | データ形式がmultipart/form-dataに ファイルアップロードで使用する |
-b | --cookie | サーバーにクッキーを送信 |
-c | --cookiejar | サーバーから受信したクッキーを保存 |
-o(--output)<file_name>
:
標準出力された内容をファイルに保存
実行:$ curl -o hoge http://example.com
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ curl -o hoge http://example.com % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1256 100 1256 0 0 2136 0 --:--:-- --:--:-- --:--:-- 2132 $ cat hoge <!doctype html> <html> <head> <title>Example Domain</title> <meta charset="utf-8" /> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <style type="text/css"> ----- 省略 ----- </body> </html> |
-v(--verbose)
:
リクエスト、レスポンス、のヘッダ情報表示
実行:$ curl -v 'Mozilla/5.0' http://example.com
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ curl -v http://example.com > GET / HTTP/1.1 > Host: example.com > User-Agent: curl/7.58.0 > Accept: */* < HTTP/1.1 200 OK < Age: 554000 < Cache-Control: max-age=604800 < Content-Type: text/html; charset=UTF-8 < Date: Mon, 21 Dec 2020 14:21:45 GMT < Etag: "3147526947+ident" < Expires: Mon, 28 Dec 2020 14:21:45 GMT < Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT < Server: ECS (sjc/4E8D) < Vary: Accept-Encoding < X-Cache: HIT < Content-Length: 1256 |
リクエストヘッダは > で表示
レスポンスヘッダは < で表示
-A(--user-agent)<ua>
:
ユーザーエージェントを指定
実行:$ curl -v -A 'Mozilla/5.0' http://example.com
1 2 3 4 5 |
$ curl -v -A 'Mozilla/5.0' http://example.com > GET / HTTP/1.1 > Host: example.com > User-Agent: Mozilla/5.0 ↑↑↑↑↑ 指定したUser-Agent('Mozilla/5.0')が設定されてますね! |
-u(--user)<user>:<password>
:
ベーシック認証情報を設定
実行:$ curl -u admin:password1234 http://example.com
ベーシック認証が掛かってるステージング環境など、API確認で有効です。
-H(--header)
:
リクエストヘッダに情報を追加/更新
実行:$ curl -v -H "Content-Type: application/json" http://example.com
1 2 3 4 5 6 |
> GET / HTTP/1.1 > Host: example.com > User-Agent: curl/7.58.0 > Accept: */* > Content-Type: application/json ↑↑↑↑↑ 指定したヘッダ情報(Content-Type: application/json)が設定されてますね! |
json形式など、指定フォーマットで送信時に使用
-X(--request)
:
リクエストメソッドを設定
実行:$ curl -v -X POST http://example.com
1 2 3 4 5 |
$ curl -v -X POST http://example.com > POST/ HTTP/1.1 ↑↑↑↑↑ メソッドがPOSTに設定されてますね! > Host: example.com > User-Agent: curl/7.58.0 |
-d(--data)
:
リクエストのパラメータを設定
実行:$ curl -H "content-type: application/json" -X POST -d '{"hoge1":"test1"}' http://example.com
json形式で以下データをPOST
1 2 3 |
{ "hoge1": "test1" } |
ファイルを指定することも可能
※ファイル名の前に@
を設定
実行:$ curl -H "content-type: application/json" -X POST -d @hoge.json http://example.com
-f(--form)<file>
:
データ形式がmultipart/form-dataにしてファイル送信
実行:$ curl -v -X POST -f @hoge.png http://example.com
先ほど説明した通りファイル指定(@ファイル名)が可能になるので
画像ファイルをPOST形式でリクエストができます。
※画像登録などのAPIの確認で使えますね!
multipart/form-data及びboundaryの分かりやすく説明されているサイト
https://www.yoheim.net/blog.php?q=20171201
-b(--cookie)<cookie file>
:
サーバーにクッキーを送信
実行:$ curl -v -b cokkie http://example.com
-c(--cookiejar)<cookie file>
:
サーバーから受信したクッキーを保存
実行:$ curl -v -c cokkie http://example.com
便利な使い方
- サーバのIPアドレスを調べたい場合
curl ifconfig.me
IPアドレス(xxx.xxx.xxx.xx)が返却される
参考にさせていただいた記事
https://qiita.com/ShibuyaBizman/items/f26a956de04e93aef111
- サーバにクッキーを送信、受信したクッキーを再び保存
$ curl -b cookie -c cookie http://www.example.com
※随時追加予定(予定)
GUIがお好みの方
curlはCUIですが、視覚的に見やすいGUIで便利なツール
「postman」を最後に紹介できればと思います。
公式HP:https://www.postman.com
良い所
- パラメータの入力のしやすい
- レスポンスデータが整形されて見やすい
- 通信プロトコルのカバー率(ほぼ全て?)
- 基本無料
- アプリ / ウェブどちらでも使用可能
- そして無料
全てにおいて優秀です。
curlもそうですが、フロント/バックエンド関係なく通信部分の確認は
使用頻度が高いと思いますので、ぜひ利用してみてください。
参考サイト一覧
https://curl.se
https://www.yoheim.net/blog.php?q=20171201
https://www.postman.com