HTTParty,Rails& Sinatra:相同(获取)请求,不同响应(行为)

时间:2014-11-14 11:07:06

标签: ruby-on-rails authentication get sinatra httparty

我写了ruby gem httparty使用http requests制作各种irb。它适用于railssinatra个应用,但当我尝试在gem个应用中使用时,我会遇到一种非常奇怪的行为。

require "httparty" class SomeAPI::Client def initizialize(some_params) @api_params = some_params end def login login_response = HTTParty.get(@api_params[:login_url]) puts "Login Result: #{login_response}" end end 看起来像这样

宝石:

irb

当我尝试从rails app gemfile登录时,一切都很好。

然后我将其添加到我的gem "SomeAPI", :path => "~/dev/SomeAPI"0:0:0:0:3000/someapi?api_params=my_params),在控制器中设置操作并尝试从class SomeController < ApplicationController def someapi client = SomeAPI::Client.new(params[:api_params]) client.login end end 登录正常工作。

sinatra app

最后,我尝试在gemfile中执行相同的操作:我将其包含在0:0:0:0:9292/someapi/:my_params中,然后尝试从new发出请求。但是,尽管client工作正常(SomeAPI成为login对象并且所有属性都已正确初始化),You need to sign in or sign up before continuing.会给我一个class App < Sinatra::Base get "/someapi/:my_params" do client = SomeAPI::Client.new client.login end end 错误消息;好像我正在尝试访问不同的资源(或者好像登录本身需要我在成功之前进行身份验证)。这是代码:

{{1}}

我尝试从端口3000运行sinatra应用程序(与rails&#39;默认值相同)但没有任何改变。

关于在哪里观看的任何想法或线索?

1 个答案:

答案 0 :(得分:0)

我通过在login方法中添加以下代码解决了我的问题:

params =
  {
    :headers => { "Content-Type" => "application/xml", "Accept" => "application/xml"},
    :basic_auth => { :username => "some_username", :password => "some_password" }
  }

(当然,将request更改为HTTParty.get(@api_params[:login_url], params)