動かざることバグの如し

近づきたいよ 君の理想に

RubyのMechanizeでフォームなしでPOST送信

環境

やりたいこと

Mechanizeでフォーム送信はできるが、普通はすでにページに存在するフォームに対してsubmitするのが一般的

ここではあえてコードだけでデータを付けた状態でフォーム送信をしてみる

コード

agent = Mechanize.new

url = "https://httpbin.org/post"
params = {
  "foo" => "bar"
}

node = {}
# Create a fake form
class << node
  def search(*args); []; end
end
node["method"] = "POST"
node["enctype"] = "multipart/form-data"
form = Mechanize::Form.new(node)
Mechanize::Util.each_parameter(params) do |k, v|
  form.fields << Mechanize::Form::Field.new({"name" => k.to_s}, v)
end
form.action = url
agent.submit(form)

これで multipart/form-data で送信できる。けどこれだったら普通にRestClient使ったほうがいいね