0

我想编写一个使用如下 URL 调用 REST API 的脚本:

http://localhost:3000/api/v1/user/xyz

如果我在浏览器中打开此 URL,它会要求输入用户电子邮件和密码。一旦我通过了身份验证,它就会返回一个带有用户 ID 的 JSON 响应。我不知道我应该如何通过脚本进行身份验证。有人可以给我一个建议吗?

这是我开始的:

require 'rubygems'
require 'net/http'
require 'json'

api_url = "http://localhost:3000/api/v1//user/xyz"

response = Net::HTTP.get_response(URI.parse(api_url))
data = JSON.parse(response.body)
fields = data.keys
puts fileds
puts data.keys

这是 API 的身份验证:

 before_filter :authorize, :except => [:keys]
private

      def authorize
        authenticate_or_request_with_http_basic do |username, password|
          user = User.find_by_email(username)

          if user && user.valid_password?(password)
            sign_in :user, user
          end
        end
      end

如何传递电子邮件和密码来验证此 API,以便我可以得到“id”作为返回?

4

2 回答 2

1

HTTP Basic 身份验证很容易添加到您的请求中,但我认为您不能get_response使用方便的方法。

请参阅:http ://ruby-doc.org/stdlib-2.0/libdoc/net/http/rdoc/Net/HTTP.html#label-Basic+Authentication

文档中的示例:

uri = URI('http://example.com/index.html?key=value')

req = Net::HTTP::Get.new(uri)
req.basic_auth 'user', 'pass' # username, password go here.

res = Net::HTTP.start(uri.hostname, uri.port) {|http|
  http.request(req)
}
puts res.body
于 2013-06-21T18:13:50.290 回答
1

rest_client gem对我很有用。至于 API 返回的内容,应该在文档中。您可以随时在 IRB 中尝试它并查看响应包含的内容。

于 2013-06-21T18:23:46.893 回答