2017-09-03 1 views
0

Je travaille sur un robot d'exploration et j'essaie de télécharger le lien "http://devonline.com/". Tout le temps je reçois le code 301 avec redirection sur le même lien. Comment éviter cette redirection et récupérer un contenu?Comment éviter la redirection

Voilà comment je fais la demande (fichier est égal à "/" dans ce cas):

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

Quel contenu? S'il s'agit d'une redirection, il est peu probable que le contenu du corps de réponse soit utile. –

+0

devonline.com ont probablement des règles sur leur config de serveur pour refuser une réponse aux demandes qui ne semblent pas provenir d'un véritable navigateur. –

+0

Ne pas "éviter" la redirection; suis le! – Chris

Répondre

0

Vous ne pouvez pas.
Si le serveur Web répond avec une redirection, extrayez l'en-tête Location et essayez votre chance ici.

Actuellement il n'y a pas de solution universelle.

J'ai écrit mon propre grabber/crawler pour 50 sites différents. Et presque tous ont une façon unique de travailler. Donc, quand il s'agit d'explorer, c'est surtout une méthode d'essayer toutes les actions possibles (si vous n'avez pas un accès API).

0

Vous souhaitez probablement utiliser une bibliothèque comme Unirest, au lieu d'écrire votre propre client HTTP. L'utilisation d'une bibliothèque présente les avantages suivants.

  • Vous n'avez pas besoin d'écrire HTTP code client
  • Vous pouvez facilement prendre en charge HTTPS
  • Redirects sont automatiquement traitées