Открытие URL WIKI запятой с помощью `open-uri` - PullRequest
5 голосов
/ 02 марта 2010

Я работаю в 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?

Я попытался избежать ссылки с CGI::escape, и я получил ту же ошибку.

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

1 Ответ

7 голосов
/ 02 марта 2010

Как правило, просто потребуется модуль 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}")
...