net :: http help [POST与curl一起工作但在表单上失败]

时间:2013-04-04 18:42:22

标签: ruby json post curl net-http

我正在尝试使用net :: http来发布帖子请求。

我使用net:http的请求失败并出现以下错误:

respnose_body,code: ["{\"message\":\"Validation Failed\",\"errors\":{\"direction\":[\"invalid\"]}}",
   "422"]]

我的请求在teminal上使用curl工作正常:

curl https://$$.com/$$ \
>     -u usr:Pssd! \
>     -X POST \
>     -H 'Accept: application/json' \
>     -H 'Content-Type: application/json' \
>     -d '{"body":"my body"}'

但是同样的请求,我尝试使用nett:http作为

执行
 http_headers => {"Accept" => "application/json", "Content-Type" => "application/json"}

 uri=URI.parse(url)
      http = Net::HTTP.new(uri.host, uri.port)
      http.use_ssl = true
      http.verify_mode = OpenSSL::SSL::VERIFY_NONE
      request = Net::HTTP::Post.new(uri.request_uri)
      http_headers.each{|key,value| request.add_field(key,value)}
      request.body = form_data  
      response=http.request(request)

The form_data is passed as a json using hash.to_json . 

现在相同的NET:HTTP代码适用于执行完全相同的不同post请求(在不同的uri上)。

服务期望数据以json的形式发送和接收。

任何调试此建议。

谢谢!

更新: 添加了我设置标题的方式

1 个答案:

答案 0 :(得分:1)

尝试:

request = Net::HTTP::Post.new(uri.request_uri, {'Content-Type' =>'application/json'})

或:

request = Net::HTTP::Post.new(uri.request_uri)
request["Content-Type"] = "application/json"