Открытие WIKI URL с запятой с помощью 'открытого uri'

Я работаю в к 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))
5
задан Harish Shetty 1 March 2010 в 22:04
поделиться

1 ответ

Обычно требуется просто модуль 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}")
7
ответ дан 14 December 2019 в 08:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: