【问题标题】:URI::InvalidURIError while trying to download by URL with square brackets尝试通过带方括号的 URL 下载时出现 URI::InvalidURIError
【发布时间】:2016-09-23 14:18:49
【问题描述】:

我目前正在尝试下载此链接的图片:

http://z.mfcdn.net/store/manga/9/14-116.0/compressed/Bleach-14-116[manga-rain]._manga_rain_bleach_ch116_01.jpg

这会产生一个URI::InvalidURIError 异常。

在阅读了 Stack Overflow 之后,我尝试过(但失败了):

uri = URI.parse(URI.encode(url.strip))

safeurl = URI.encode(url.strip)

我确实知道这个问题与网络浏览器更“友好”有关,但我不知道如何让我的应用程序也这样做。

【问题讨论】:

  • 方括号在 URI 中是不允许的,尽管有些人坚持要把方括号放在那里。尝试分别用%5b%5d 替换它们。

标签: ruby uri open-uri


【解决方案1】:

这是一种处理 URL 中无效字符的 hack 方法:

u = 'http://z.mfcdn.net/store/manga/9/14-116.0/compressed/Bleach-14-116[manga-rain]._manga_rain_bleach_ch116_01.jpg'
fixed = u.gsub(/[\[\]]/) { '%%%s' % $&.ord.to_s(16) }

open(fixed)

这应该可以解决这个特殊问题。

【讨论】:

  • 它使 URL 符合适当的标准。正如您所观察到的,浏览器对于路径和查询组件中可以包含的内容非常松懈。
猜你喜欢
  • 2012-02-09
  • 2013-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多