gpt4 book ai didi

ruby-on-rails - 法拉第 gem 未定义方法 'bytesize' =' for Hash`

转载 作者:行者123 更新时间:2023-12-05 02:16:12 29 4
gpt4 key购买 nike

我想向 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)

但它也不起作用。

最佳答案

官方faraday repo 提供下一个描述:

# 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 转换为 string(json) 格式:

form_data = {a: 1, b: 2}.to_json

注意。使用符号键格式时,不要按.to_s转换,否则会导致解析错误。

通过你提供的法拉第配置,我在将 format_data 转换为 json 后不会导致任何错误。因此,新错误与法拉第 gem 或提供的代码无关。

关于ruby-on-rails - 法拉第 gem 未定义方法 'bytesize' =' for Hash`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50523995/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com