如何处理 Ruby 中的'HTTP session already opened'错误?



我试图通过用户的access_token获取facebook上的用户详细信息。需要启用HTTPS。

get '/fbdetails' do
 uri = URI('https://graph.facebook.com/me?access_token=CAACEdEose0cBAMF7kse5oFQyygDDgOZCMQFvddZBEskIdxiNlmWd2Mzx3lLWZCoZCJZCjXnMN08NLe8Ts8UJoOd9XjNrJ9QG5BsZC9ahB0h9NcdSDZA0LDdjfmtiXnmimyNZBTTxv7UT1ZBcz2vbKj2DYZAAGdoy7woJEcu1ZAoFpzcpaa47mz0DLwgNPY6PZA0Vrc7ZAT9snEZC6XdiUZAkgUZARvhBIxlltqEEelAZD')
 Net::HTTP.start(uri.host, uri.port,
 :use_ssl => uri.scheme == 'https').start do |http|
    request = Net::HTTP::Get.new uri.request_uri
    response = http.request 
  end
  return response 
end

在这里,一个IOError被丢弃,即HTTP会话已经打开。

需要这种格式的JSON响应:

{ 
  "id": "10206515808233150",
  "first_name": "Ashutosh",
  "gender": "male",
  "last_name": "Jha",
  "link": "https://www.facebook.com/app_scoped_user_id/10206515808233150/",
  "locale": "en_US",
  "name": "Ashutosh Jha",
  "timezone": 5.5,
  "updated_time": "2015-02-17T16:38:08+0000",
  "verified": true
}

你的代码有两个错误。

(1)您使用了两次start方法,因此抛出了"HTTP会话已打开"错误。

Net::HTTP.start(uri.host, uri.port,
 :use_ssl => uri.scheme == 'https').start do |http|....

(2)您错过了http.request

的参数
response = http.request 
所以你的代码应该是:
 uri = URI('https://graph.facebook.com/me?access_token=CAACEdEose0cBAMF7kse5oFQyygDDgOZCMQFvddZBEskIdxiNlmWd2Mzx3lLWZCoZCJZCjXnMN08NLe8Ts8UJoOd9XjNrJ9QG5BsZC9ahB0h9NcdSDZA0LDdjfmtiXnmimyNZBTTxv7UT1ZBcz2vbKj2DYZAAGdoy7woJEcu1ZAoFpzcpaa47mz0DLwgNPY6PZA0Vrc7ZAT9snEZC6XdiUZAkgUZARvhBIxlltqEEelAZD')
 Net::HTTP.start(uri.host, uri.port,
 :use_ssl => uri.scheme == 'https') do |http|
    request = Net::HTTP::Get.new uri.request_uri
    response = http.request request
    #puts response.body
  end

你可以从ruby net/http库文档中找到更多有用的信息

最新更新