Как правило, просто потребуется модуль 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
), вы получите следующее:
Скрипты должны использовать информативную строку User-Agent с контактной информацией, или они могут быть заблокированы IP без уведомления.
Однако предоставление строки user-agent решает проблему:
open("http://en.wikipedia.org/wiki/Thor_Industries,_Inc.",
"User-Agent" => "Ruby/#{RUBY_VERSION}")