为什么我必须为net :: HTTP请求提供URI.encode甚至安全字符?
我试图使用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中引发exception:
NoMethodError:未定义的方法为
empty?' for # from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:1470:in
empty?' for # from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:1470:in
initialize’
巧合的是,我偶然发现了一个类似的代码片段,它在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)
现在它工作正常,但为什么? 在我提到的URL中没有需要转义的保留字符,为什么我必须调用URI.encode
才能成功获取get_response
?
Ruby 1.8 get似乎需要在uri结束时使用正斜杠。
“http://www.google.com/”
工作,而
“http://www.google.com”
没有。