3

我正在尝试使用 net/http 来获取基于我挖出的旧库的 API 调用响应https://github.com/jurisgalang/facebook/blob/master/lib/facebook/graph-object.rb#L22

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: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:未定义的方法“空?” 为了

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

如何使用 net/http 和 http.get 请求响应?

4

1 回答 1

8

快速浏览一下文档,第二个参数get是一个哈希值,而你传递的是 nil,请参阅:

http.get(uri.request_uri, nil)

您的第二次尝试应该没问题,尽管我确实发现在我的设置(ruby 1.9.3 和 MacPorts 的 openssl 库)中 Net::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 证书,这是一个潜在的安全问题。然而,作为概念证明,这个片段对我有用——所以希望这会给你一个很好的调试工作数据点。

于 2013-01-17T19:00:48.257 回答