我正在尝试使用net / http来获取基于我挖掘 https://github.com/jurisgalang/facebook/blob/master/lib/facebook/graph-object.rb#L22的旧库的API调用的响应 require 'net/http'API_HOST = "graph.facebook.com"API_BASE_URL = "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\u0026gt; 这导致了
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请求响应?
只是快速浏览一下 the documentation,获得的第二个参数是一个哈希,你传递的是零,请参阅:http.get(uri.request_uri, nil)
你的第二次尝试应该没问题,虽然我确实发现我的设置(ruby 1.9.3和MacPorts的openssl库)Net :: HTTP拒绝了Facebook的ssl证书(我得到了“通过peer重置连接”.以下代码片段为我工作:
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证书,这是一个潜在的安全问题.然而,作为一个概念证明,这个片段对我有用 – 所以希望这会为你的调试工作提供一个很好的数据点.