📑

curlコマンドでいろいろ試してみた

2025/01/21に公開

はじめに

恥ずかしながら、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