1

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.

Antwort

0

Es scheint nicht wie Ruby Problem, sondern nur www.defense.gov Art und Weise. https://www.defense.gov/News/Contracts/Contract-View/Article/14038760 gibt Redirect (301) und dann 404 trotz der Möglichkeit, es zu bekommen.

https://www.defense.gov/News/Contracts/Contract-View/Article/14038760 scheint wie eine URL zu einigen fehlenden Daten, aber https://www.defense.gov/News/Contracts/Contract-View/Article/1403876/ funktioniert gut (aktuell für 26.17.2017 03:24 +7). Warum glauben Sie, dass die URL mit der ID 14038760 gültig ist?

Ich habe herausgefunden, dass https://www.defense.gov/News/Contracts/Contract-View/Article/1403876 zu https://www.defense.gov/News/Contracts/Contract-View/Article/1403876/ umleitet (die gleiche URL aber mit Schrägstrich), während die URL mit Schrägstrich 200 Antwort sofort gibt.

Was können Sie tun? Versuchen Sie, https://www.defense.gov/News/Contracts/source/nav/ eine Liste der tatsächlichen Verträge zuerst zu erhalten und dann jede von ihnen mit getrennten Anfragen anzufordern.

+0

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! –

+0

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. –

Verwandte Themen