bav*_*ten 6 ruby ruby-on-rails faraday ruby-on-rails-4
我想向 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)
Run Code Online (Sandbox Code Playgroud)
但我收到这个错误:
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)
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
conn.post("/api/test", form_data.to_json)
Run Code Online (Sandbox Code Playgroud)
但它也不起作用。
官方法拉第存储库提供了以下描述:
# 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
Run Code Online (Sandbox Code Playgroud)
因此,内容类型“application/json”无法解析哈希。Gem 本身不会将正文数据转换为所需的格式。
您需要将 form_data 转换为 string( json
) 格式:
form_data = {a: 1, b: 2}.to_json
Run Code Online (Sandbox Code Playgroud)
笔记。使用符号键格式时不要进行转换,.to_s
因为这会导致解析错误。
使用您提供的法拉第配置,将 format_data 转换为 json 后不会导致任何错误。因此,新错误与法拉第宝石或提供的代码无关。
归档时间: |
|
查看次数: |
6063 次 |
最近记录: |