net / http.rb: 560: in `initialize ': getaddrinfo: Имя или служба неизвестны (SocketError) - PullRequest
9 голосов
/ 09 апреля 2010
@@timestamp = nil

def generate_oauth_url
  @@timestamp = timestamp
  url = CONNECT_URL + REQUEST_TOKEN_PATH + "&oauth_callback=#{OAUTH_CALLBACK}&oauth_consumer_key=#{OAUTH_CONSUMER_KEY}&oauth_nonce=#{NONCE}    &oauth_signature_method=#{OAUTH_SIGNATURE_METHOD}&oauth_timestamp=#{@@timestamp}&oauth_version=#{OAUTH_VERSION}"
  puts url
  url             
end

def sign(url)
  Base64.encode64(HMAC::SHA1.digest((NONCE + url), OAUTH_CONSUMER_SECRET)).strip
end

def get_request_token
  url = generate_oauth_url
  signed_url = sign(url)          
  request = Net::HTTP.new((CONNECT_URL + REQUEST_TOKEN_PATH),80)
  puts request.inspect
  headers = { "Authorization" => "Authorization: OAuth oauth_nonce = #{NONCE}, oauth_callback = #{OAUTH_CALLBACK}, oauth_signature_meth    od = #{OAUTH_SIGNATURE_METHOD}, oauth_timestamp=#{@@timestamp}, oauth_consumer_key = #{OAUTH_CONSUMER_KEY}, oauth_signature = #{signed_url}, oauth_versio    n = #{OAUTH_VERSION}" }

  request.post(url, nil,headers)                  
end

def timestamp
  Time.now.to_i
end

Я пытаюсь сделать то, что делает oauth, пытаясь понять, как использовать заголовки авторизации. Я также получаю следующую ошибку. Я пытаюсь подключиться к API-интерфейсу linkedin.

/usr/lib/ruby/1.8/net/http.rb:560:in 'initialize': getaddrinfo: Name or service not known (SocketError)

Я был бы очень признателен, если бы кто-то подтолкнул меня в правильном направлении.

Ответы [ 2 ]

18 голосов
/ 09 апреля 2010

«Имя или служба не известна» - это ошибка уровня сокета, которая обычно указывает либо на неверный IP-адрес / DNS-имя хоста, либо на незарегистрированное имя порта (например, telnet the.host.name service, где service не является зарегистрированным именем службы. )

Убедитесь, что CONNECT_URL содержит действительный URL.

РЕДАКТИРОВАТЬ: Я не программист на Ruby, но я не против поспорить, что Net::HTTP.new требует имя хоста (например, www.facebook.com) в качестве первого аргумента, а не полный URL (например, www.facebook.com/login.php?method=oauth).

9 голосов
/ 16 ноября 2011

Вы также получаете эту ошибку, когда у вас нет подключения к Интернету, так как поиск DNS часто является первым, что происходит при установлении соединения TCP с использованием имени хоста.

Отключите сетевой кабель и попробуйте:

Socket.getaddrinfo("www.example.com", "http")
# => SocketError: getaddrinfo: nodename nor servname provided, or not known
...