コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Faradayで普通のフォームのようなPOSTする

すげー当たり前だけど、Faradayがらみは application/json の事例しかないので改めて書いてみる

環境

faraday (0.15.4)

考え方

POST リクエストは、ふつう HTML フォームを介して送信され、サーバーに変化をもたらします。この場合、 <form> 要素の enctype 属性もしくは、 <input> 又は <button> 要素の formenctype 属性に適切な文字列を設定することでコンテンツタイプを選択します。 application/x-www-form-urlencoded: キーと値は、その間に '=' がある形でキーと値の組になり、 '&' で区切られてエンコードされます。キーや値の英数字以外の文字は、パーセントエンコーディングされます。このため、このタイプはバイナリデータを扱うのには向きません (代わりに multipart/form-data を使用してください) - POST - HTTP | MDN

なので普通に application/x-www-form-urlencoded をcontent_typeに加えて、URLエンコードしたものを含めればいい

url = "https://example.com"
params = {page: 10}

Faraday.new.post do |req|
  req.headers["Content-Type"] = "application/x-www-form-urlencoded"
  req.url url
  # ActiveSupportの to_query を使って横着をしている
  req.body = params.to_query
end

という形でやれば実現はできる

参考リンク