我在Ruby的OpenURI遵循重定向功能时遇到一些问题。
[转到其中包含%20
且以30倍重定向的URL时,Ruby的OpenURI失败。
+
而不是%20
完全相同的URL起作用。%20
和+
两种版本都可以与curl -L
正常工作(如下)。>>require 'open-uri' base = "http://software-engineering-handbook.com/Handbook" puts "===> PASS: URI Open +" result = open "#{base}/Video+Series" p result.status puts "===> PASS: Curl +" puts `curl -LIsS "#{base}/Video+Series" | grep HTTP` puts "===> PASS: Curl %20" puts `curl -LIsS "#{base}/Video%20Series" | grep HTTP` puts "===> FAIL: URI Open %20" begin result = open "#{base}/Video%20Series" p result.status rescue => e puts "#{e.class} #{e.message}" end
输出
===> PASS: URI Open + ["200", "OK"] ===> PASS: Curl + HTTP/1.1 200 OK ===> PASS: Curl %20 HTTP/1.1 303 See Other HTTP/1.1 200 OK ===> FAIL: URI Open %20 OpenURI::HTTPError 302 Found (Invalid Location URI)
我不确定这是怎么回事。尝试过HTTParty(尽管我知道这只是一个包装器),希望看到其他行为,但也失败了。
我对Ruby的OpenURI遵循重定向功能有一些问题。当转到其中包含%20且以30倍重定向的URL时,Ruby的OpenURI失败。完全相同的URL,带有...