【发布时间】:2018-05-25 07:43:38
【问题描述】:
我想向 API 发送 POST 请求。这是我的代码:
conn = Faraday.new(url: BASE) do |faraday|
faraday.response :logger
faraday.request :url_encoded
faraday.headers['Content-Type'] = 'application/json'
faraday.headers["Authorization"] = "bearer #{AppConfig.instance.access_token}"
faraday.adapter Faraday.default_adapter
end
form_data = {a: 1, b: 2}
conn.post("/api/test", form_data)
但我收到此错误:
NoMethodError (undefined method `bytesize' for {:a=>1, :b=>2}:Hash)
我也试过了:
conn.post("/api/test", form_data.to_json)
但它也不起作用。
【问题讨论】:
-
这是一个不错的库,用于在 ruby 中发出 HTTP 请求:ruby-doc.org/stdlib-2.5.1/libdoc/net/http/rdoc/Net/HTTP.html
-
这个错误可能是因为
form_data不是正确的json格式。 -
to_json的结果肯定响应bytesize:form_data.to_json.respond_to?(:bytesize) #=> true -
应该没问题。刚刚尝试使用您的设置发出发布请求,一切正常。
conn.post("https://google.com/api/test", {a: 1, b: 2}.to_json)=>#<Faraday::Response:0x00007fe66b9f5a20 ...> -
当您运行第二个代码(带有
form_data.to_json的代码)时会发生什么——您得到的是同样的错误还是另一个错误?
标签: ruby-on-rails ruby ruby-on-rails-4 faraday