OpenURI无法跟随具有%20的URL

问题描述 投票:0回答:2

我在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,带有...

ruby open-uri
2个回答
0
投票

服务器正在通过重定向到无效的URI进行响应。 curl对此不严谨,但Ruby要求严格。


-1
投票

URI.escape应该可以帮助您

© www.soinside.com 2019 - 2024. All rights reserved.