2013-04-04 47 views
0

我想用net :: http做一个post请求。净:: http帮助[POST工作与卷曲,但在窗体上失败]

我的请求,利用网:HTTP失败,以下错误:

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

我的要求工作正常使用的端子短卷发:

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

但是同样的请求,我试图执行使用实价: 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代码适用于不同的发布请求(不同的发布请求uri)执行完全一样。

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

任何建议来调试这个。

谢谢!

更新: 加我设立头

+0

你是如何设定相当于头卷曲'-H“内容类型:application/json''在你的net :: http代码中?我看不到它。 。 。我期望看到一个'request.header'或类似的东西(要检查正确的语法......) – 2013-04-04 19:10:31

回答

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" 
+0

谢谢尼尔。我添加了我设置标题的方式。基本上我做request.add_field(键,值),它适用于我正在做的其他职位请求。我的预感是它在我传递的数据中,但我不确定(验证失败可能意味着json数据验证?) – codeObserver 2013-04-04 20:50:27

+0

还尝试请求[key] =值而不是使用request.add_field。它仍然失败,同样的错误 – codeObserver 2013-04-04 21:18:15