我想向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)
但它也不起作用。
答案 0 :(得分:0)
官方faraday回购提供下一个说明:
# post payload as JSON instead of "www-form-urlencoded" encoding:
conn.post do |req|
req.url '/nigiri'
req.headers['Content-Type'] = 'application/json'
req.body = '{ "name": "Unagi" }'
end
所以,内容类型' application / json'无法解决哈希问题。 Gem本身并没有将身体数据转换为所需的格式。
您需要将form_data转换为字符串(json
)格式:
form_data = {a: 1, b: 2}.to_json
请注意。使用符号键格式时,请勿按.to_s
进行转换,因为这会导致解析错误。
由于您提供了法拉第配置,我将format_data转换为json后无法导致任何错误。因此,新的错误与法拉第宝石或提供的代码无关。