2017-09-03 3 views
0

Ich arbeite an einem Crawler und ich versuche, den Link "http://devonline.com/" herunterladen. Die ganze Zeit bekomme ich Code 301 mit Redirect auf dem gleichen Link.Wie Umleitung zu vermeiden

Wie vermeidet man diese Umleitung und einen Inhalt abrufen? Diese

ist, wie ich den Antrag stellen (Datei "/" in diesem Fall gleich):

String request 
     = "GET " + file 
     + (file.endsWith("robots.txt") ? " HTTP/1.0\r\n" : " HTTP/1.1\r\n") 
     //    " HTTP/1.1\r\n" 
     + "User-Agent: " + CrawlerConfig.USER_AGENT + "\r\n" 
     //    + ((!CrawlerConfig.SAVE_IMAGES) ? "Accept: text/html\r\n" : "") 
     //    + "Accept: text/*\r\n" 
     + (file.endsWith("robots.txt") ? "Connection: close\r\n" : "") 
     + "Host: " + host + "\r\n" + "\r\n"/* 
     * + body 
     */; 

outStream.write(request.getBytes("US-ASCII")); 
outStream.flush(); 
+0

Welche Inhalte? Wenn es sich um eine Weiterleitung handelt, gibt es wahrscheinlich keinen nützlichen Inhalt für den Antworttext. –

+0

devonline.com hat wahrscheinlich Regeln in der Server-Konfiguration erhalten, um eine Antwort auf Anfragen zu verweigern, die nicht so aussehen, als kämen sie von einem echten Browser. –

+0

"Vermeiden" Sie die Weiterleitung nicht; Folge es! – Chris

Antwort

0

Sie können nicht.
Wenn der Webserver mit einer Weiterleitung antwortet, extrahieren Sie den Header Location und versuchen Sie Ihr Glück dort.

Momentan gibt es keine universelle Lösung.

Ich schrieb meine eigenen Grabber/Crawler für 50 verschiedene Websites. Und fast alle haben eine einzigartige Art zu arbeiten.

Wenn es also zum Crawlen kommt, ist es meistens eine Methode, um jede mögliche Aktion auszuprobieren (wenn Sie keinen API-Zugang haben).

0

Sie möchten wahrscheinlich eine Bibliothek wie Unirest verwenden, anstatt Ihren eigenen HTTP-Client zu schreiben.

Die Verwendung einer Bibliothek bietet die folgenden Vorteile.

  • Sie brauchen nicht HTTP-Client-Code
  • schreiben können Sie unterstützen HTTPS leicht
  • Redirects behandelt werden automatisch