使用`open-uri`用逗号打开WIKI URL

Har*_*tty 5 ruby open-uri ruby-on-rails

我正在运行中OpenURI::HTTPError: 403 Forbidden,当我尝试错误open用逗号(或其他特殊字符,如一个URL .).我可以在浏览器中打开相同的URL.

require 'open-uri'
url = "http://en.wikipedia.org/wiki/Thor_Industries,_Inc."
f = open(url)
# throws OpenURI::HTTPError: 403 Forbidden error
Run Code Online (Sandbox Code Playgroud)

我如何逃避这样的URL?

我试图逃避网址,CGI::escape我得到同样的错误.

f = open(CGI::escape(url))
Run Code Online (Sandbox Code Playgroud)

Mat*_*chu 7

通常,人们只需要模块cgi,然后使用CGI::escape(str).

require 'cgi'
require 'open-uri'
escaped_page = CGI::escape("Thor_Industries,_Inc.")
url = "http://en.wikipedia.org/wiki/#{escaped_page}"
f = open(url)
Run Code Online (Sandbox Code Playgroud)

但是,这似乎不适用于您的特定实例,仍然返回403.无论如何,我将留在此处作为参考.


编辑:维基百科拒绝您的请求,因为它怀疑您是机器人.似乎某些明确内容的页面被授予您,但那些与其"安全"模式不匹配的页面(例如那些包含点或逗号的页面)需要进行筛选.如果您实际输出内容(我这样做了Net::HTTP),您会得到以下内容:

脚本应使用带有联系信息的信息性用户代理字符串,否则它们可能会被IP阻止,恕不另行通知.

但是,提供用户代理字符串可以解决问题:

open("http://en.wikipedia.org/wiki/Thor_Industries,_Inc.",
  "User-Agent" => "Ruby/#{RUBY_VERSION}")
Run Code Online (Sandbox Code Playgroud)