12/23って思い出深いですよね。
さて今週はみんな大好き、
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
$ 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
$ 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
$ 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
> 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
$ 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
{
"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もそうですが、フロント/バックエンド関係なく通信部分の確認は
使用頻度が高いと思いますので、ぜひ利用してみてください。
私も普段はpostmanを使っています。
こんなにcurlの事を書いておいて、題名もcurlなのに。
使いやすいので。
おわり
参考サイト一覧
https://curl.se
https://www.yoheim.net/blog.php?q=20171201
https://www.postman.com
アドベントカレンダーも残り2日!
フロントの二人が最後を締めくくってくれます!
KOご期待!
Now hiring!
プラコレでは、自由な未来をつくるために
一緒に冒険したいエンジニア・デザイナーを募集しています!
https://www.wantedly.com/projects/262436
運営サービス
PLACOLE(プラコレウェディング)
DRESSY(ドレシー)byプラコレ
farny(ファーニー)byプラコレ