如何将http post请求发送到rails应用程序以获取json响应

时间:2011-06-23 19:15:35

标签: ruby-on-rails json post typhoeus

对于GET请求: -

 response = Typhoeus::Request.get("http://localhost:3000/users/1.json?oauth_token=12")

这将完美地返回Json响应。

邮政请求

: -

   response = Typhoeus::Request.post("http://localhost:3000/users/1.json?oauth_token=12",:params => {'[user][city]' => params[:location]})

无效...

这是返回路由错误。

更新: -

登录此API后呼叫正在运行..

     response = Typhoeus::Request.post(API_SERVER_ADDRESS + "user_sessions.json" + API_OAUTH_TOKEN, :params => {'[user_session][email]' => params[:email], '[user_session][password]' =>params[:password]})

在路线中

resources :users

并且网络http请求也正常运行..

更新

例如来自rails log的http请求是: -

   Parameters: {"commit"=>"Update", "authenticity_token"=>"8nvzCd0GF9IxjMcTfHOMJTPnycVPNIENMoMff8w4qAI=", "utf8"=>"✓", "id"=>"1", "user"=>{ "city"=>"abc"}}

现在我想发送同样的请求..

3 个答案:

答案 0 :(得分:1)

:params参数应该是你的parms的哈希,意思是键值对,所以可能是这样的:

response = Typhoeus::Request.post("http://localhost:3000/users/1.json?oauth_token=12",:params => {:user => 'u', :city => 'c', :location => 'l'})

......或某些 - 无论价值是什么,无论价值是多少。我认为你原来的东西并没有转化成你想要做的有意义的哈希。

另外,请检查路由,以确保您正在尝试执行的操作已正确路由。

答案 1 :(得分:1)

这是解决方案

来自this

 response = Typhoeus::Request.put(API_SERVER_ADDRESS + "users/" +user_id + ".json" ,:params => {:oauth_token=>'12', :user=>{:city => params[:location]}})

答案 2 :(得分:0)

确保您在POST文件中声明了单独的routes.rb路线。即使URL相同,不同的HTTP方法也需要不同的路由。

使用resources :users默认情况下会提供以下内容:

GET     /users/new        # new
POST    /users            # create
GET     /users/:id        # show
GET     /users/:id/edit   # edit
PUT     /users/:id        # update
DELETE  /users/:id        # destroy