2013-06-21 48 views
0

我想編寫一個腳本使用URL等,其調用REST API:如果我在瀏覽器中打開這個網址如何編寫腳本來調用REST API?

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

,它要求用戶的電子郵件和密碼。一旦我進行了身份驗證,它就會返回帶有用戶標識的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,所以我可以得到「身份證「作爲回報?

+1

完全取決於API如何驗證。一個'REST' api只能提供有關數據的約定,但它並沒有讓你假設任何關於驗證如何工作的內容。它是HTTP認證嗎?或者它需要某種API令牌?或者您是否在網頁上提供了一個表單,要求您先登錄?或者是其他東西?查閱API的文檔以找出它需要憑據的方式。 –

+0

我已經更新了我的代碼以顯示驗證此api使用。 – user588324

+0

也考慮使用ActiveResource。 –

回答

1

HTTP基本認證很容易添加到您的請求中,但我認爲您不能使用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 
+0

'.rvm /紅寶石/紅寶石1.9.3-P392/LIB /紅寶石/ 1.9.1 /淨/ http.rb:1860:在'初始化 ':未定義的方法'空'來自/Users/nit/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/net/http.rb:2093的#(NoMethodError) \t:在'初始化「從recdns_rest_get_arid.rb \t:6:'新」 \t從recdns_rest_get_arid.rb:6:'

「'這是我收到 – user588324

+0

錯誤有沒有一種方法,我可以通過用戶名和密碼時有api電話。而我填寫彈出的用戶名/密碼將驗證api並返回預期結果? – user588324

+0

這是我現在使用的但是驗證被拒絕'require'rubygems' require'net/http' require'json' uri = URI('http:// localhost:3000/api/v1/user/authkey' ) req = Net :: HTTP :: Get.new(uri) req.basic_auth'user','pass' res = Net :: HTTP.start(uri.hostname,uri.port){| http | http.request(REQ) } 提出res.body' – user588324

1

rest_client gem爲我的偉大工程。至於API返回的內容應該在文檔中。您可以隨時在IRB中嘗試它,並查看響應中包含的內容。