2010-03-11 10 views
6

yo estaba tratando de enviar una petición GET a Twitter (ID de usuario reemplazado por razones de privacidad) usando Net :: HTTP:¿Por qué tengo que URI.encode incluso los caracteres seguros para las solicitudes Net :: HTTP?

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

Esto arroja una excepción en 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'

simplemente por casualidad, me topé con un fragmento de código similar, que utiliza URI.encodeURI.parse antes, por lo que he copiado y lo intentó de nuevo:

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

ahora funciona bien, pero ¿por qué? No hay caracteres reservados que necesiten escaparse en la URL que mencioné, entonces ¿por qué tengo que llamar al URI.encode para obtener el get_response para tener éxito?

+2

que probar su primer código y es que funciona para mí – shingara

+0

Su primer fragmento de código funciona con toda tranquilidad en Ruby 1.9.1 como mínimo. – anshul

+0

¿Podría incluir su entorno (versión de Ruby y sistema operativo)? Tu código inicial también funciona para mí. –

Respuesta

1

Rubí 1,8 get parece requerir una barra inclinada al final de la URI.

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

trabajado, mientras que

"http://www.google.com"

no lo hicieron.

Cuestiones relacionadas