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