2010-03-01 60 views
5

Me estoy ejecutando en OpenURI::HTTPError: 403 Forbidden error cuando intento open una URL con una coma (u otros caracteres especiales como .). Puedo abrir la misma url en un navegador.Abrir una URL WIKI con una coma usando `open-uri`

require 'open-uri' 
url = "http://en.wikipedia.org/wiki/Thor_Industries,_Inc." 
f = open(url) 
# throws OpenURI::HTTPError: 403 Forbidden error 

¿Cómo puedo escapar de dicha URL?

He intentado escapar de la url con CGI::escape y me sale el mismo error.

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

Respuesta

7

Típicamente, se podría requerir simplemente el módulo cgi, a continuación, utilizar 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) 

Sin embargo, esto no parece trabajar para su caso particular, y todavía devuelve un 403. Me dejaré esto aquí como referencia, sin tener en cuenta.


Editar: Wikipedia rechaza sus peticiones, ya que sospecha que usted es un bot. Parecería que se le otorgan ciertas páginas que son claramente de contenido, pero aquellas que no coinciden con su patrón "seguro" (por ejemplo, aquellas que contienen puntos o comas) están sujetas a su evaluación. Si realmente el contenido de salida (Lo hice con Net::HTTP), se obtiene lo siguiente:

Scripts deben usar una cadena User-Agent informativo con información de contacto, o pueden ser IP-bloqueado sin previo aviso.

Proporcionar una cadena de agente de usuario, sin embargo, resuelve el problema:

open("http://en.wikipedia.org/wiki/Thor_Industries,_Inc.", 
    "User-Agent" => "Ruby/#{RUBY_VERSION}") 
+0

Aunque, probándola, yo también estoy un 403. Voy a seguir trabajando en ello ... – Matchu

+0

I había intentado 'CGI :: escape' con resultados similares. Olvidé agregarlo en mi pregunta. –

+0

Es posible que desee ver qué resultado obtiene. Recuerdo que hace unas semanas Wikipedia comenzó a darme 403 errores al realizar solicitudes de Ruby porque no estaba suministrando ninguna cadena de agente de usuario, y el resultado lo decía. – Matchu

Cuestiones relacionadas