【问题标题】:How to send a http post request to a rails app to get json response如何向 Rails 应用程序发送 http post 请求以获取 json 响应
【发布时间】:2011-06-23 19:15:34
【问题描述】:

对于 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 post call 正在工作..

     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

而且 web http 请求也运行良好..

更新

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

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

现在我想发送相同类型的请求..

【问题讨论】:

  • 如果你能解释一下你试图传递的参数,我可以用适当的代码更新我的例子。
  • 恐怕我要打平底船了,我被难住了。您将该工作登录调用发布到哪个 API 服务?另一端是你写的吗?只是因为 github 站点 (github.com/dbalatero/typhoeus) 上的 Typhoeus 基础知识没有显示您正在使用的 :params 设置,括号中的字符串作为键...自述文件中的所有内容都是直接的键值对。如果可行,那么我只是不熟悉该特定语法。
  • @yardboy 他们将如何重新格式化:params => {'[user_session][email]' => params[:email], '[user_session][password]' =>params[:密码]}) 或 "user"=>{ "city"=>"abc"}
  • 可能类似于: :params => { :user_session => { 'email' => params[:email], 'password' => params[:password] } } 这就是参数例如,如果所有这些都来自以标准方式构建的表单,则哈希看起来就像在您的控制器中一样,即您将访问电子邮件和密码数据作为 params[:user_session]['email'] 和 params [:user_session]['密码']。
  • 我已经试过了..但这根本不起作用。

标签: ruby-on-rails json post typhoeus


【解决方案1】:

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

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

...或类似的东西-无论参数是什么,值是什么。我认为,您的原件并没有转化为您想要做的有意义的哈希。

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

【讨论】:

    【解决方案2】:

    解决办法

    来自this

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

    【讨论】:

      【解决方案3】:

      确保您已在 routes.rb 文件中声明了单独的 POST 路由。即使 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
      

      【讨论】:

      • 路由其资源:用户
      • 你能发布服务器日志的输出吗?
      • 很难粘贴该日志然后在编辑器中对齐。所以请检查这个截图。同时,我正在尝试更新问题。 cl.ly/4030152U001E0U113a1l
      • 这看起来更像是服务器响应对象。您是否在终端中运行rails server?这就是我要寻找的输出。
      • @luke Yupp .. 基本上我已经用内置的 json api 响应调用在 ruby​​ on rails 中开发了 web 应用程序。现在我在移动网站上工作。这就是我卡住的地方。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      • 2018-12-20
      • 2019-02-23
      • 2018-01-28
      • 2011-03-03
      • 2011-07-06
      相关资源
      最近更新 更多