Как правило, один просто требует модуль 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. Я оставлю это здесь для справки, независимо.
Edit: Википедия отказывается ваши запросы, потому что подозревает, что вы бот. Казалось бы, вам предоставлены определенные страницы с четким содержанием, но те, которые не соответствуют его «безопасному» шаблону (например, те, которые содержат точки или запятые), подлежат его экранированию. Если вы на самом деле выводить контент (я сделал это с Net::HTTP
), вы получите следующее:
Сценарии должны использовать информативную строку User-Agent с контактной информацией, или они могут быть IP-заблокированы без предварительного уведомления.
Обеспечивая строку агента пользователя, однако, решает этот вопрос:
open("http://en.wikipedia.org/wiki/Thor_Industries,_Inc.",
"User-Agent" => "Ruby/#{RUBY_VERSION}")
Хотя, испытывая его, я также получаю 403. Я буду продолжать работать над этим ... – Matchu
I попробовал «CGI :: escape» с аналогичными результатами. Я забыл добавить его в свой вопрос. –
Возможно, вам захочется узнать, какой результат вы получаете. Я помню, как несколько недель назад Wikipedia начала давать мне 403 ошибки при выполнении запросов от Ruby, потому что я не поставлял ни одну строку user-agent, а результат сказал так. – Matchu