3

I am trying to use net/http to get a response for API call based on an old library I dug up 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)

The uri ends up as <URI::HTTPS:0x0000010091fc48 URL:https://graph.facebook.com/boo>

This results in

NoMethodError: undefined method `keys' for nil:NilClass

I assumed it is because dest argument is obsolete: http://ruby-doc.org/stdlib-1.9.3/libdoc/net/http/rdoc/Net/HTTP.html#method-i-get

So I did it without

res            = http.get(uri.request_uri)

Which results in

NoMethodError: undefined method `empty?' for

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

How can one request a response using net/http and http.get?

4

1 に答える 1

8

ドキュメントをざっと見てみると、 の 2 番目の引数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 に答える