Ich arbeite durch Tutorials unter http://ruby.bastardsbook.com/chapters/web-crawling/ und möchte eine kleine Klarstellung auf der Behandlung Redirects, weil die DOD-Website, die der Autor als ein Beispiel verwendet, seit der Zeit des Schreibens neu gemacht wurde und ich bin auf einige unerwartete Ergebnisse gestoßen, während ich seinen Code angepasst habe, um mit der aktuellen Version zu arbeiten. (Bitte beachten Sie, dass ich keine Hilfe brauche, um den Code neu zu schreiben, ich frage mich nur, warum die Sachen, die hier passiert passieren)Ruby: Net :: HTTP und Weiterleitungen
Speziell bekomme ich Code 301 egal ob die Seite die ich versuche mit Net::HTTP.get_response
zu bekommen existiert oder nicht. Zum Beispiel:
require 'net/http'
VALID = 'https://www.defense.gov/News/Contracts/Contract-View/Article/14038760'
INVALID = 'https://www.defense.gov/News/Contracts/Contract-View/Article/14038759'
resp = Net::HTTP.get_response(URI.parse(VALID))
puts resp.code # 301
resp = Net::HTTP.get_response(URI.parse(INVALID))
puts resp.code # 301
Also, warum gibt eine gültige Adresse eine 301 Moved Permanently? Und nicht nur das, sondern tatsächlich versuchen, diese Umleitung zu folgen (nutzlos im Rahmen dieses Tutorials, da der ganze Punkt war, alles zu überspringen, was kein 2xx ist), wie hier vorgeschlagen Ruby Net::HTTP - following 301 redirects gibt mir eine 404, vermutlich weil der Umleitungslink hat einen Schrägstrich.
if resp.code == '301'
resp = Net::HTTP.get_response(URI.parse(resp.header['location']))
end
puts resp.code # 404
Noch mir rätselhaft ist, dass, wenn ich auf resp.body
sah fand ich, dass trotz dieser Fehler 404, hatte ich in der Tat erfolgreich die Seiteninhalte heruntergeladen.
Ich wäre sehr dankbar, wenn mich jemand durch das führen würde, was genau hier vor sich geht. Vielen Dank für Ihre Hilfe und dafür, dass Sie sich im Voraus Zeit genommen haben.
Haha, du hast recht, ich habe keine Ahnung, wie diese 0 am Ende der Verbindung stecken geblieben bin, ich muss es irgendwann manuell eingegeben haben und habe es nicht bemerkt. Und, ja, die tatsächliche Liste der Verträge zu ergattern scheint eine viel vernünftigere Idee zu sein als das Überprüfen von 1,5 Millionen URLs für die Gültigkeit, ich weiß nicht, warum das nicht ist, was der Typ in seinem Tutorial tut, wahrscheinlich nur um den Unterschied zwischen dem Netz zu zeigen/http und Nokogiri. Vielen Dank! –
Oh, ich überprüfte und zurück, als er schrieb die Tutorial-Vertrags-ID ist nur 4653 gekrönt, also war es nicht so eine wahnsinnige Sache zu tun. –