2010-03-11 1 views
6

Stavo cercando di inviare una richiesta GET a Twitter (ID utente sostituito per motivi di privacy) utilizzando Net :: HTTP:Perché devo URI.encode anche caratteri sicuri per le richieste Net :: HTTP?

url = URI.parse("http://api.twitter.com/1/friends/ids.json?user_id=12345") 
resp = Net::HTTP.get_response(url) 

questo genera un'eccezione in Net :: HTTP:

NoMethodError: undefined method empty?' for #<URI::HTTP:0x59f5c04> from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:1470:in initialize'

solo per coincidenza, sono incappato in un frammento di codice simile, che ha usato URI.encode prima URI.parse, così ho copiato questo e riprovato:

url = URI.parse(URI.encode("http://api.twitter.com/1/friends/ids.json?user_id=12345")) 
resp = Net::HTTP.get_response(url) 

ora funziona bene, ma perché? Non ci sono caratteri riservati che devono essere salvati nell'URL che ho menzionato, quindi perché devo chiamare URI.encode per il get_response per avere successo?

+2

Provo il tuo primo codice e funziona per me – shingara

+0

Il tuo primo snippet di codice funziona in modo pacifico almeno in Ruby 1.9.1. – anshul

+0

Puoi includere il tuo ambiente (versione Ruby e sistema operativo)? Il tuo codice iniziale funziona anche per me. –

risposta

1

Ruby 1.8 get sembra richiedere una barra in avanti alla fine dell'uri.

"http://www.google.com/"

lavorato, mentre

"http://www.google.com"

no.