4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

プラコレ Advent Calendar 2020Advent Calendar 2020

Day 23

よく使用するcURLコマンド

Last updated at Posted at 2020-12-23

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プラコレ

4
2
0

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
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?