4

J'utilise le code suivant pour obtenir le code de réponse renvoyé d'une page ASPXComment suivre une "redirection automatique de page" pour obtenir le code de réponse?

HttpConnection connection 
    = (HttpConnection) Connector.open("http://company.com/temp1.aspx" 
             + ";deviceside=true"); 
connection.setRequestMethod(HttpConnection.GET); 
connection.setRequestProperty(HttpHeaders.HEADER_CONNECTION, "close"); 
connection.setRequestProperty(HttpHeaders.HEADER_CONTENT_LENGTH, "0"); 
int resCode = connection.getResponseCode(); 

Il fonctionne très bien. Mais que faire si le lien "http://company.com/temp1.aspx" redirige automatiquement vers une autre page; supposer "http://noncompany.com/temp2.aspx"? Comment puis-je obtenir le code de réponse renvoyé par le second lien (celui auquel le premier lien a été redirigé)? Y a-t-il quelque chose comme "follow redirection" pour obtenir la nouvelle réponse de la page qui a été redirigée automatiquement?

Merci d'avance.

Répondre

8

J'ai trouvé la solution, Ici, il est pour ceux qui sont intéressés:

int resCode; 
String location = "http://company.com/temp1.aspx"; 
while (true) { 
    HttpConnection connection = (HttpConnection) Connector.open(location + ";deviceside=true"); 
    connection.setRequestMethod(HttpConnection.GET); 
    connection.setRequestProperty(HttpHeaders.HEADER_CONNECTION, "close"); 
    connection.setRequestProperty(HttpHeaders.HEADER_CONTENT_LENGTH, "0"); 
    resCode = connection.getResponseCode(); 
    if(resCode == HttpConnection.HTTP_TEMP_REDIRECT 
      || resCode == HttpConnection.HTTP_MOVED_TEMP 
      || resCode == HttpConnection.HTTP_MOVED_PERM) { 
      location = connection.getHeaderField("location").trim(); 
    } else { 
      resCode = connection.getResponseCode(); 
      break; 
    } 
} 
+1

Vous pouvez remplacer l'instruction while (true) par une boucle for (jusqu'à 5-10 tentatives environ) pour éviter d'entrer dans une boucle de redirection infinie, ce qui peut parfois arriver avec un serveur Web ou un proxy mal configuré. –

+0

Merci Marc pour le commentaire. Je pense aussi qu'il existe une autre solution, garder trace des liens redirigés, en ajoutant chaque nouvel emplacement (lien) à un vecteur par exemple, et chaque fois qu'un nouveau lien de redirection est trouvé, le code doit d'abord vérifier s'il existe dans le vecteur, s'il existe, il provoquera une redirection infinie cyclique. Merci pour cette note. –

3

Vous devez coder votre HttpConnection dans une boucle qui suit les redirections HTTP en fonction du code de réponse. L'en-tête HTTP "location" dans la réponse est censé vous donner un nouvel hôte (peut-être peut-il être utilisé pour remplacer l'adresse URL entière).

HttpConnection.HTTP_MOVED_TEMP et sont les deux codes de réponse qui indiquent une redirection.

+0

Merci homme, Je l'ai vu votre réponse après avoir publié ma solution. Par ailleurs, il existe un autre code de réponse HttpConnection.HTTP_TEMP_REDIRECT. Merci encore pour votre réponse. Je vais le marquer comme une réponse et plus. –

Questions connexes