Faradayのmultipartの書き方
困っていたこと
Faradayを使ってサーバーへfileをpostとしようとしていました
ちなみにrequestを二回していているのはparameterがmultipart/form-dataで送信するものでなければ、application/x-www-form-urlencodedで送ってねという意味です
This request middleware setup affects POST/PUT requests in the following way:
Request::Multipart checks for files in the payload, otherwise leaves everything untouched;
Request::UrlEncoded encodes as "application/x-www-form-urlencoded" if not already encoded or of another type
Swapping middleware means giving the other priority. Specifying the "Content-Type" for the request is explicitly stating which middleware should process it.
File: README — Documentation for faraday (0.17.1)
conn = Faraday.new conn.request :multipart conn.request :url_encoded conn.adapter :net_http conn.post('https://example.com', parameter) # => multipart/form-dataと見なされない
ただ何度試してもrequestヘッダーはContent-Type: application/x-www-form-urlencoded
parameterは適切なので多分Faradayのmultipartの指定の仕方が悪いんだよなあといろいろ調べてました
解決策
書き方変えたらうまく動きました
上の書き方はmultipart/form-dataになりません
動いたコードはこちら
conn = Faraday.new do |f| conn.request :multipart conn.request :url_encoded conn.adapter :net_http end conn.post('https://example.com', parameter) # => multipart/form-dataと見なされる
一度Faraday.newしてからpropertyを指定していくやり方はダメでしたが、blockの中で指定するようにしたら動きました
Faradayの公式ドキュメントでもblockのなかで指定するような書き方になってました
ただ最初のやり方も別にエラーにはなってないしやってることは同じな気がするんだが、、
なぜかはわかりません、時間があったら調べてみようと思います