我正在尝试筛选一个包含特殊字符(如丹麦字符'ø'
)的URL。
URL为:
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在浏览器中运行良好。
为什么会出现这种情况,我必须做些什么来解决它?
我发现问题出在我试图解析的URL的服务器上。他们拒绝了OpenURI使用的默认用户代理。
从OpenURI的文档中,它说可以通过一个可选的散列参数指定额外的头字段:
open("http://www.ruby-lang.org/en/",
"User-Agent" => "Ruby/#{RUBY_VERSION}",
"From" => "foo@bar.invalid",
"Referer" => "http://www.ruby-lang.org/") {|f|
# ...
}
我只是使用了一个不同的用户代理,一切都很好。