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
答案 0 :(得分:1)
原因在于您明确设置request.form_data
的第一个代码段:
req.form_data = params
表格为encoded with x-www-urlencoded
implicitly。
您可能最好设置body
或明确设置Net::HTTP::Post.new
。