ruby-on-rails – 使用`open-uri`用逗号打开WIKI URL

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

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

我如何逃避这样的URL?

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

f = open(CGI::escape(url))

解决方法

通常,只需要模块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)

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

编辑:维基百科拒绝您的请求,因为它怀疑您是机器人.似乎某些明确内容的页面被授予您,但那些与其“安全”模式不匹配的页面(例如包含点或逗号的页面)将受到筛选.如果您实际输出内容(我使用Net :: HTTP执行此操作),您将获得以下内容:

Scripts should use an informative User-Agent string with contact information,or they may be IP-blocked without notice.

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

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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...