📑
curlコマンドでいろいろ試してみた
はじめに
恥ずかしながら、curlコマンドでPOSTメソッドやデータを送ることができることを知りませんでした。どんな感じのHTTPリクエストにで送信されるのか、nc(netcat)でサーバーをたてて確認しました。
環境
この記事で使用した開発環境は以下の通りです。
- OS: Windows 11 Pro
- wsl Ubuntu 24.04 で実行
確認方法
ターミナルでnc -l 8080
を実行しサーバーをたて、別のターミナルからcurlコマンドを実行し確認しました。
接続先アドレスのみ
GETメソッドで送信されます。
$ curl "http://localhost:8080"
$ nc -l 8080
GET / HTTP/1.1
Host: localhost:8080
User-Agent: curl/8.5.0
Accept: */*
-Hオプション
Content-typeが追加されます。
$ curl "http://localhost:8080" -H 'Content-type: application/json'
$ nc -l 8080
GET / HTTP/1.1
Host: localhost:8080
User-Agent: curl/8.5.0
Accept: */*
Content-type: application/json
-Xオプション
PostやGetなどメソッドを変更できます。
$ curl "http://localhost:8080" \
-H 'Content-type: application/js' \
-X POST
$ nc -l 8080
POST / HTTP/1.1
Host: localhost:8080
User-Agent: curl/8.5.0
Accept: */*
Content-type: application/js
-dオプション
JSONなどのデータを付加できます。
curl "http://localhost:8080" \
-H 'Content-type: application/js' \
-X POST \
-d '{"key":"value","key2":"value2"}'
$ nc -l 8080
POST / HTTP/1.1
Host: localhost:8080
User-Agent: curl/8.5.0
Accept: */*
Content-type: application/js
Content-Length: 31
{"key":"value","key2":"value2"}
ファイルでオプション指定
コピペでも毎回入力するのは大変なので、あらかじめファイルにオプションを書いておき、それを読んで実行することもできます。
option.txt
--url "http://localhost:8080"
--header "Content-type: application/js"
--request POST
--data '{"key":"value","key2":"value2"}'
実行(結果は同じ)
$ curl -K .\options.txt
データをJSONファイルから読み込む
データの部分だけファイルに書いておき、読み込むこともできます。
data.json
{"key":"value","key2":"value2"}
実行(結果は同じ)
$ curl "http://localhost:8080" \
-H 'Content-type: application/json' \
-X POST \
-d @data.json
合わせ技
オプションをファイルで指定し、データをJSONファイルから読み込む合わせ技
options2.txt
--url "http://localhost:8080"
--header "Content-type: application/js"
--request POST
--data @data.json
実行(結果は同じ)
$ curl -K .\options2.txt
まとめ
ちょっとしたサーバーのテストなら、手軽で便利なので使っていきたいです。
Discussion