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?
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 Ссылка
angegebenDein 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.
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. "
Tags und Links ruby http-error open-uri