0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

こんにちは!

APIの検証でお世話になっているcurlコマンド。
みなさんはどのくらい使いこなしているでしょうか。

私もよく使うのですが、おそらく、ほんの一部の機能しか使ってません。

そこで、今回は、man curlの内容からピックアップしてご紹介しようと思います。

man curlの情報量

Linuxユーザーなら一度は使ったことのあるmanコマンドでcurlの説明がどのくらいあるのか、確認してみます。

$ man curl | wc -l
    6365

6千行、、ちょっとした書物ですね。

多すぎるので、ざっくり見て、幾つかピックアップします。

基礎編: Webアクセス系

1. curlの最も基本的な使い方

$ curl https://www.example.com

2. ファイルをダウンロード(結果を保存)

-o オプションで指定したファイルにWebページの内容を保存。

$ curl -o index.html https://www.example.com

3. HTTPヘッダーを取得

-I オプションでHTTPヘッダー情報のみを取得。

$ curl -I https://www.example.com

4. リダイレクトを追跡

-L オプションでリダイレクト (301, 302など) を自動的に追跡。

$ curl -L https://www.example.com/redirect

応用編: リクエスト系

5. POSTリクエストを送信

-d オプションでPOSTリクエストを送信。

$ curl -d "name=value&another=anothervalue" https://www.example.com/api

6. 特定のHTTPメソッドを指定

-X オプションでGETやPOST以外のHTTPメソッド (PUT, DELETE, PATCHなど) を使用。

$ curl -X PUT -d "data=updated" https://www.example.com/api/resource

7. カスタムヘッダーを送信

-H オプションでHTTPリクエストにカスタムヘッダーを追加。

$ curl -H "User-Agent: MyCustomAgent" https://www.example.com

8. フォームデータを送信

-F オプションでmultipart/form-data形式のデータを送信。 (ファイルアップロードなど)

$ curl -F "file=@image.jpg" https://www.example.com/upload

9. クッキーを扱う

-b オプションでクッキーを送信し、 -c オプションでクッキーを保存する。

$ curl -b cookie.txt -c cookie.txt https://www.example.com

10. HTTP/2を使用

--http2 オプションでHTTP/2プロトコルを使用する。
http通信などで使うと、高速化されていいらしい。

$ curl --http2 https://www.example.com

実践編: ネットワーク状況を把握 & デバッグ

11. 接続時間を制限

--connect-timeout オプションで接続タイムアウトを設定。

$ curl --connect-timeout 5 https://www.example.com

12. 転送速度を制限

--limit-rate オプションで転送速度を制限。
1Bなどにすると、途中で止まります。

$ curl --limit-rate 100K https://www.example.com

13. 転送状況を詳細に表示

-v オプションで詳細な転送状況を表示。 (ヘッダー情報、接続情報など)
たまに見ると面白いです。

$ curl -v https://www.example.com

14. トレースログを出力

--trace オプションで送受信データを含む詳細なトレースログをファイルに出力。

$ curl --trace trace.log https://www.example.com

15. ネットワークインターフェースを指定

--interface オプションで使用するネットワークインターフェースを指定。
一度だけ使った気がする。(詳細は覚えてないです)

$ curl --interface eth0 https://www.example.com

16. DNSサーバーを指定

--dns-servers オプションで使用するDNSサーバーを指定。

$ curl --dns-servers 192.168.0.1,192.168.0.2 https://example.com

上級編: curlをさらに使いこなす

17. コマンドライン変数を使う

--variable オプションで変数を定義し、 --expand- プレフィックス付きのオプションで参照。

$ curl --variable token=my_secret_token --expand-header "Authorization: Bearer {{token}}" https://api.example.com

18. curlコマンドをC言語のコードに変換

--libcurl オプションで、curlコマンドをC言語のlibcurl関数を使ったコードに変換。
こちら、確かにC言語で出力されました。

$ curl --libcurl example.c https://www.example.com

19. 外部コマンドと連携

| (パイプ) や > (リダイレクト) を使って、curlの出力を他のコマンドに渡したり、ファイルに保存したりできる。

# curlの出力をgrepでフィルタリング
$ curl https://www.example.com | grep "keyword"

# curlの出力をファイルに保存
$ curl https://www.example.com > output.txt

20. 設定ファイルを使う

-K オプションで設定ファイルを読み込み、curlの動作をカスタマイズ。

$ curl -K config.txt https://www.example.com

まとめ

curlは奥が深いですね、、、

今回は、curlコマンドの基本的な使い方から応用編までご紹介しました。

curlを使いこなすと、作業効率がかなりアップします。
マスターすると、検証が非常に楽になりそうです。

私もまだ道半ばですが、みなさんも一緒にがんばりましょう!

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?