Ruby Net :: HTTP :: Post会覆盖自定义Content-Type标头

时间:2017-09-14 10:09:04

标签: ruby rest http post

Ruby的Net::HTTP::Post似乎会覆盖自定义Content-Type标头。当我设置标头'Content-Type':'application/json'时,我从服务器收到以下错误:

HTTP Status 400 - Bad Content-Type header value: 'application/json, application/x-www-form-urlencoded'

注意application/x-www-form-urlencoded为什么会这样?有没有办法删除它?

我的代码:

def post(uri, params)
  req = Net::HTTP::Post.new(uri.path, 'Content-Type':'application/json')
  req.form_data = params
  Net::HTTP.start(uri.hostname, uri.port) {|http|
    http.request(req)
  }
end

有趣的是,下面的代码使用Net::HTTP采用不同的方法:

def post(uri, params)
  headers = {'Content-Type' =>'application/json'}
  request = Net::HTTP.new(uri.host, uri.port)
  request.post(uri.path, params.to_json, headers)
end

1 个答案:

答案 0 :(得分:1)

原因在于您明确设置request.form_data的第一个代码段:

req.form_data = params

表格为encoded with x-www-urlencoded implicitly

您可能最好设置body或明确设置Net::HTTP::Post.new