2010-03-01 6 views
5

Ich renne in OpenURI::HTTPError: 403 Forbidden Fehler , wenn ich versuchen, open eine URL mit einem Komma (oder andere Sonderzeichen wie .). Ich kann die gleiche URL in einem Browser öffnen.Öffnen einer WIKI-URL mit einem Komma mit `open-uri`

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

Wie entkomme ich solche URL?

Ich habe versucht, die URL mit CGI::escape zu entkommen, und ich bekomme den gleichen Fehler.

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

Antwort

7

Normalerweise würde man einfach erfordert das Modul cgi, dann CGI::escape(str) verwenden.

require 'cgi' 
require 'open-uri' 
escaped_page = CGI::escape("Thor_Industries,_Inc.") 
url = "http://en.wikipedia.org/wiki/#{escaped_page}" 
f = open(url) 

Allerdings scheint dies nicht für Ihren speziellen Fall zu arbeiten, und gibt nach wie vor ein 403. ich diese Referenz hier verlassen werden, und zwar unabhängig.


Edit: Wikipedia Ihre Anfragen verweigert, weil sie vermutet, dass Sie ein Bot sind. Es scheint, dass bestimmte Seiten, die eindeutig Inhalt sind, Ihnen gewährt werden, aber diejenigen, die nicht zu seinem "sicheren" Muster passen (z. B. solche, die Punkte oder Kommas enthalten), unterliegen seiner Prüfung. Wenn Sie tatsächlich Ausgabe der Inhalt (Ich tat dies mit Net::HTTP), erhalten Sie den folgenden Schritte aus:

Scripts sollte einen informativen User-Agenten-String mit Kontaktinformationen verwenden, oder sie können ohne vorherige Ankündigung IP-blockiert sein.

ein User-Agent-String-Providing, löst jedoch das Problem:

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

Obwohl, testet es, ich bin auch ein 403. immer ich es weiter arbeiten werde ... – Matchu

+0

I hatte 'CGI :: escape' mit ähnlichen Ergebnissen versucht. Ich habe vergessen, es in meine Frage einzufügen. –

+0

Sie möchten vielleicht sehen, welche Ausgabe Sie bekommen. Ich erinnere mich, dass Wikipedia vor ein paar Wochen begann, mir 403 Fehler zu geben, als ich Anfragen von Ruby anrief, weil ich keine User-Agent-Zeichenfolge lieferte, und die Ausgabe sagte dies. – Matchu

Verwandte Themen