带有基本身份验证的'httparty'命令行版本工作简单而且很棒:
httparty -u username:password http://example.com/api/url
但是现在我正在寻找可以在Rails应用程序中将基本身份验证添加到HTTParty.get调用的方式。首先,出于测试目的,我想在Controller中硬编码登录凭据。只是为了确保它有效。但是我找不到任何文档或示例如何传递这些内容。
没有凭据的HTTParty.get可以正常工作:
@blah = HTTParty.get("http://twitter.com/statuses/public_timeline.json")
但是我不知道如何在接受 -u username:password 部分的情况下对其进行修改。
我的下一个挑战(对于Ruby / Rails来说是一个新手)是从用户表单获取用户凭据并动态传递它,但对我来说最重要的是让硬编码版本起作用。< / p>
答案 0 :(得分:134)
auth = {:username => "test", :password => "test"}
@blah = HTTParty.get("http://twitter.com/statuses/public_timeline.json",
:basic_auth => auth)
答案 1 :(得分:0)
两点,
如果你正在使用Twitter的api,除非我弄错了,否则我认为他们不再允许基本身份验证:(所以你可能想要查看像OmniAuth这样的OAuth登录。您不需要HTTParty或登录表单,您链接到Twitter登录并且用户在那里输入凭据,然后Twitter在经过身份验证后向您的应用发送回叫请求.OmniAuth为您完成大部分工作,你只需从回调路线中提供的信息中提取所需的信息。
但即便如此,您仍然需要特定于您的应用程序的OAuth“消费者密钥”和“消费者密钥”(Twitter如何授权您的应用程序,区别于用户)。并且您不希望在源代码中使用这些,也不需要任何身份验证密钥。
执行此操作的典型方法是将其粘贴到 签入源控件的config/omniauth.yml
文件中:
twitter:
key: CONSUMER_KEY
secret: CONSUMER_SECRET
然后将它们加载到初始化程序config/initializers/omniauth.rb
中:
consumers = YAML.load("#{Rails.root}/config/omniauth.yml")
Rails.application.config.middleware.use OmniAuth::Builder do
provider :twitter, consumers['twitter']['key'], consumers['twitter']['secret']
end
您可以采用类似的方法加载基本的auth用户名/密码,只需将它们粘贴到您可以从HTTParty调用的任何地方访问的对象中。