我写了ruby gem
httparty
使用http requests
制作各种irb
。它适用于rails
和sinatra
个应用,但当我尝试在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;默认值相同)但没有任何改变。
关于在哪里观看的任何想法或线索?
答案 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)
)