search
LoginSignup
2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

placoleプラコレ Advent Calendar 2020 Advent Calendar 2020 Day 23

posted at

updated at

Organization

よく使用するcURLコマンド

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 サーバーから受信したクッキーを保存

公式マニュアル:https://curl.se/docs/manpage.html

-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

hoge.json
{
  "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ご期待!:beers:

Now hiring!
プラコレでは、自由な未来をつくるために
一緒に冒険したいエンジニア・デザイナーを募集しています!
https://www.wantedly.com/projects/262436
運営サービス
PLACOLE(プラコレウェディング)
DRESSY(ドレシー)byプラコレ
farny(ファーニー)byプラコレ

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2
Help us understand the problem. What are the problem?