curlコマンドで入力フォームにテキストを入力してPOSTをするテスト

curlのDオプション

用途としてはログイン状態のHTMLをスクレイピングしたい時とかかな

某アパレルブランドのURLが
https://www.xxxxxx.com/jp/auth/login

ログインフォームが以下だった場合

<form action="/jp/auth/login" method="post">
  <input type="text" name="login_id">
  <input type="text" name="password">
  <input type="submit" value="送信">
</form>

この場合以下のコマンドでログインした時のHTMLが取得できる

curl -d login_id=xxxxxxxxxxx -d password=xxxxxxxxxxxxxx https://www.xxxxxx.com/jp/auth/login

プログラムから実行

これでHTMLは返って来ますが
他にもいろいろ処理をしたいときには

Rubyからcurlコマンドを叩くコードを自動生成する以下のサイトを使うと
コピペするだけでRubyからcurlコマンドを実行するコードが作れます

https://jhawthorn.github.io/curl-to-ruby/

require 'net/http'
require 'uri'

uri = URI.parse("https://www.xxxxxx.com/jp/auth/login")
request = Net::HTTP::Post.new(uri)
request.set_form_data(
  "login_id" => "xxxxxxxxxxx",
  "password" => "xxxxxxxxxxxxxx",
)

req_options = {
  use_ssl: uri.scheme == "https",
}

response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(request)
end

# response.code
# response.body

以下の記事を参考にしました

lovepeers.org