2013-01-17 145 views
3

我試圖使用net/HTTP來獲取基於一個古老的圖書館我挖出https://github.com/jurisgalang/facebook/blob/master/lib/facebook/graph-object.rb#L22的API調用的響應執行的請求網/ HTTP

require 'net/http' 

API_HOST  = "graph.facebook.com" 
API_BASE_URL = "https://#{API_HOST}" 
path   = "/boo" 

uri   = URI.parse "#{API_BASE_URL}#{path}" 
http   = Net::HTTP.new(uri.host, uri.port) 
res   = http.get(uri.request_uri, nil) 

uri最終爲<URI::HTTPS:0x0000010091fc48 URL:https://graph.facebook.com/boo>

這導致

NoMethodError: undefined method `keys' for nil:NilClass

我以爲這是因爲dest的說法已經過時了:http://ruby-doc.org/stdlib-1.9.3/libdoc/net/http/rdoc/Net/HTTP.html#method-i-get

所以我做到了不

res   = http.get(uri.request_uri) 

導致

NoMethodError: undefined method `empty?' for

#<URI::HTTPS:0x0000010091fc48 URL:https://graph.facebook.com/boo> 

怎麼能要求使用net/http和http.get迴應?

回答

7

就在的the documentation一個非常快速的一瞥,第二個參數是get哈希,和你傳遞零,請參閱:

http.get(uri.request_uri, nil) 

你的第二次嘗試應該OK,但我確實發現。用我的設置(紅寶石1.9.3和MacPorts的OpenSSL庫)的淨:: HTTP被拒絕Facebook的SSL證書(我得到的‘連接被對方​​復位’下面的代碼片段爲我工作:

require 'net/http' 

API_HOST  = "graph.facebook.com" 
API_BASE_URL = "https://#{API_HOST}" 
path   = "/boo" 

uri   = URI.parse "#{API_BASE_URL}#{path}" 
http   = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
res   = http.get(uri.request_uri) 
puts res.body 

請注意,我沒有驗證SSL c證書,這是一個潛在的安全問題。然而,作爲一個概念證明,這段代碼對我很有幫助 - 所以希望這會爲您的調試工作提供一個很好的數據點。

+0

好的,謝謝,我將不得不弄清楚如何處理那個SSL問題,然後 – phwd

+2

我已經搜索了最高的山峯和最深的海洋爲這個答案。謝謝! – Sheharyar

+0

如果我的api要求輸入用戶名和密碼,該怎麼辦?我該如何處理?在我的情況下,當我的api彈出一個基本認證窗口,並要求用戶名和密碼,然後返回結果 – user588324