将 Curl 请求转换为 Net::HTTP 时出错
Error Converting Curl Request to 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
。你只需要直接分配body即可。
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)
您正在尝试将 username
和 password
作为表单编码参数 (set_form_data
) 发送,而 curl
命令将它们作为 json.尝试将请求的内容主体设置为命令中显示的 json。
我正在尝试将 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
。你只需要直接分配body即可。
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)
您正在尝试将 username
和 password
作为表单编码参数 (set_form_data
) 发送,而 curl
命令将它们作为 json.尝试将请求的内容主体设置为命令中显示的 json。