当解析后的URL在浏览器中正常工作时,为什么OpenURI会返回404?

时间:2014-10-15 09:58:37

标签: ruby-on-rails ruby nokogiri open-uri

我正在尝试屏蔽包含丹麦字符'ø'等特殊字符的网址。

网址为:

url = "http://www.zara.com/dk/da/dame/tilbehør/tilbehør/stribet-hue-c271008p2195502.html"

为了让OpenURI将其识别为有效的URL,我这样做:

url = Addressable::URI.parse(url).normalize.to_s

并用以下内容解析:

doc = Nokogiri::HTML(open(url))

返回:

OpenURI::HTTPError: 404 Not Found

我不知道为什么OpenURI返回404,因为规范化的URL在浏览器中工作正常。

为什么会出现这种情况,我需要做些什么来解决它?

1 个答案:

答案 0 :(得分:5)

我发现问题出在我试图解析的URL的服务器上。他们拒绝了OpenURI使用的默认用户代理。

从OpenURI上的documentation开始,它表示可以通过可选的哈希参数指定其他头字段:

open("http://www.ruby-lang.org/en/",
  "User-Agent" => "Ruby/#{RUBY_VERSION}",
  "From" => "foo@bar.invalid",
  "Referer" => "http://www.ruby-lang.org/") {|f|
  # ...
}

我刚使用了不同的User-Agent,一切正常。