'open_http': 403 Verboten (OpenURI :: HTTPError) für die Zeichenfolge "Steve_Jobs", aber nicht für eine andere Zeichenfolge

8

Ich habe die Ruby-Tutorials auf Ссылка durchlaufen und bin dabei auf den folgenden Code gestoßen:

%Vor%

Der Code schlägt mit der folgenden Ablaufverfolgung fehl:

%Vor%

Mein Problem ist nicht, dass der Code fehlschlägt, aber wenn ich r2 zu etwas anderem als Steve_Jobs ändere, funktioniert es. Was passiert hier?

    
Yahoo-Me 07.06.2012, 04:16
quelle

2 Antworten

2

Ich denke, das passiert bei gesperrten Einträgen wie "Steve Jobs", "Al-Gore" usw. Das ist im selben Buch angegeben, auf das Sie sich beziehen:

  

Für einige Seiten - wie Al Gores gesperrter Eintrag - wird Wikipedia   Reagieren nicht auf eine Webanfrage, wenn kein User-Agent angegeben ist. Das   "User-Agent" bezieht sich normalerweise auf Ihren Browser und Sie können dies sehen   Überprüfen der Header, die Sie für eine Seitenanforderung in Ihrem Browser senden.   Durch die Bereitstellung eines Schlüssel-Wert-Paares "User-Agent" (ich benutze grundsätzlich "Ruby"   und es scheint zu funktionieren), wir können es als Hash übergeben (ich benutze die Konstante   HEADERS_HASH im Beispiel) als zweites Argument der Methode   ruf an.

Es wird später bei Ссылка

angegeben     
Arc 18.06.2012, 17:49
quelle
9

Dein Code läuft gut für mich (Ruby MRI 1.9.3), wenn ich eine existierende Wiki-Seite anfordere.

Wenn ich eine Wiki-Seite anfordere, die NICHT existiert, erhalte ich einen Mediawiki 404-Fehlercode.

  • Steve_Jobs = & gt; Erfolg
  • Steve_Austin = & gt; Erfolg
  • Steve_Rogers = & gt; Erfolg
  • Steve_Foo = & gt; Fehler

Wikipedia macht eine Tonne Caching. Wenn Sie also Antworten für "Steve_Jobs" sehen, die sich von anderen Personen unterscheiden, dann raten Sie am besten, weil Wikipedia den Artikel von Steve Jobs zwischenspeichert weil er berühmt ist und möglicherweise zusätzliche Überprüfungen / Überprüfungen hinzufügt, um den Artikel vor schnellen Änderungen, Verunstaltungen usw. zu schützen.

Die Lösung für Sie: Öffnen Sie die URL immer mit einer User-Agent-Zeichenfolge.

%Vor%

Details aus den Mediawiki-Dokumenten: "Wenn Sie HTTP-Anforderungen an die MediaWiki-Web-Service-API senden, müssen Sie einen User-Agent-Header angeben, der Ihren Client richtig identifiziert. Verwenden Sie nicht den von Ihrem Client bereitgestellten Standard-User-Agent Bibliothek, aber erstellen Sie einen benutzerdefinierten Header, der den Namen und die Versionsnummer Ihres Clients enthält: so etwas wie "MyCuteBot / 0.1".

Wenn Sie in Wikimedia-Wikis keinen User-Agent-Header angeben oder einen leeren oder generischen Header angeben, schlägt Ihre Anforderung mit einem HTTP 403-Fehler fehl. Siehe unsere User-Agent-Richtlinie. "

    
joelparkerhenderson 10.06.2012 00:56
quelle

Tags und Links