为什么我必须为Net :: HTTP请求提供URI.encode甚至安全字符?

时间:2010-03-11 09:30:31

标签: ruby http url-encoding

我试图使用Net :: HTTP向Twitter发送GET请求(因隐私原因而替换用户ID):

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

这会在Net :: HTTP中引发异常:

  

NoMethodError:未定义的方法empty?' for #<URI::HTTP:0x59f5c04> from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:1470:in初始化'

巧合的是,我偶然发现了一个类似的代码片段,它在URI.encode之前使用URI.parse,所以我复制了它并再次尝试:

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

现在它运作正常,但为什么呢?在我提到的网址中没有需要转义的保留字符,为什么我必须致电URI.encode get_response才能成功?

1 个答案:

答案 0 :(得分:1)

Ruby 1.8 get似乎需要在uri结束时使用正斜杠。

  

“http://www.google.com/”

工作,而

  

“http://www.google.com”

没有。