2010-03-01 2 views
5

Я запускаю код OpenURI::HTTPError: 403 Forbidden Ошибка , когда я пытаюсь сделать open URL с запятой (или другими специальными символами, такими как .). Я могу открыть тот же URL-адрес в браузере.Открытие URL WIKI с запятой, использующей `open-uri`

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)) 

ответ

7

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

Хотя, испытывая его, я также получаю 403. Я буду продолжать работать над этим ... – Matchu

+0

I попробовал «CGI :: escape» с аналогичными результатами. Я забыл добавить его в свой вопрос. –

+0

Возможно, вам захочется узнать, какой результат вы получаете. Я помню, как несколько недель назад Wikipedia начала давать мне 403 ошибки при выполнении запросов от Ruby, потому что я не поставлял ни одну строку user-agent, а результат сказал так. – Matchu

 Смежные вопросы

  • Нет связанных вопросов^_^