ruby - 将 Curl 请求转换为 Net::HTTP 时出错

标签 ruby curl net-http

我正在尝试将 curl 请求转换为 ruby​​。我不明白为什么会这样:

curl -H "Content-Type: application/json" -X POST -d '{"username":"foo","password":"bar"}' https://xxxxxxxx.ws/authenticate

虽然这不是:

uri = URI('https://xxxxxxxx.ws/authenticate')

https = Net::HTTP.new(uri.host,uri.port)
https.use_ssl = true

req = Net::HTTP::Post.new(uri)
req['Content-Type'] = 'application/json'
req.set_form_data(username: 'foo', password: 'bar')

res = https.request(req)

我得到的响应是:

(byebug) res
#<Net::HTTPBadRequest 400 Bad Request readbody=true>
(byebug) res.body
"{\"error\":\"username needed\"}"

有什么方法可以检查幕后发生的事情吗?

最佳答案

set_form_data 会将请求负载编码为 www-form-encoded。您需要直接分配正文。

uri = URI('https://xxxxxxxx.ws/authenticate')

https = Net::HTTP.new(uri.host,uri.port)
https.use_ssl = true

req = Net::HTTP::Post.new(uri)
req['Content-Type'] = 'application/json'
req.body = { username: 'foo', password: 'bar' }.to_json

res = https.request(req)

关于ruby - 将 Curl 请求转换为 Net::HTTP 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34206624/

相关文章:

ruby-on-rails - Rails ActiveRecord 条件回调问题

linux - wget .vs curl 使用 linux

PHP cURL 上传文件到 Node JS 服务器

bash - 检查curl增量(--continue-at)下载是否成功

ruby - 如果Net::HTTP的open_timeout和read_timeout没有设置的话,会无限等待吗?

ruby-on-rails - 如何显示学校名称= x 的所有部门?

ruby - 在 Ruby 中检索文件

ruby-on-rails - 在 ruby​​ 方法中返回一个包含数组和散列的数组?

ruby-on-rails - 关于使用 ruby​​ 代码的 http POST api 调用的问题

ruby - 如何通过 Net::HTTP::Get 下载二进制文件?