7 votes

Récupérer l'URL après une redirection en utilisant HttpClient.Execute(HttpGet)

J'ai cherché pendant un certain temps et je ne trouve pas de réponse claire. J'essaie de me connecter à un site web. https://hrlink.healthnet.com/ Ce site web redirige vers une page de connexion qui n'est pas cohérente. Je dois envoyer mes identifiants de connexion à l'URL redirigé.

J'essaie de coder ceci en Java mais je ne comprends pas comment obtenir l'URL à partir de la réponse. Cela peut sembler un peu désordonné mais je l'ai fait de cette façon pendant mes tests.

    HttpGet httpget = new HttpGet("https://hrlink.healthnet.com/");
    HttpResponse response = httpclient.execute(httpget);HttpEntity entity = response.getEntity();

    String redirectURL = "";

    for(org.apache.http.Header header : response.getHeaders("Location")) {
        redirectURL += "Location: " + header.getValue()) + "\r\n";
        }        

    InputStream is;
    is = entity.getContent();

    BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
    StringBuilder sb = new StringBuilder(); 
    String line = null; 
    while ((line = reader.readLine()) != null) { 
            sb.append(line + "\n"); 
    } 
    is.close(); 

    String result = sb.toString();

Je sais que je suis redirigé parce que ma chaîne de résultats montre la page de connexion actuelle mais je ne suis pas capable d'obtenir la nouvelle URL.

Dans FireFox, j'utilise TamperData. Lorsque je navigue sur ce site web https://hrlink.healthnet.com/ J'ai un GET avec un 302 - Found et l'emplacement de la page de connexion. Puis un autre GET vers la page de connexion réelle

Toute aide est grandement appréciée, merci.

9voto

yorkw Points 24676

Vérifiez documentation w3c :

10.3.3 302 Found

L'URI temporaire devrait être indiqué dans le champ "Location" de la réponse. Sauf si la méthode de requête était HEAD, l'entité de la réponse DEVRAIT contenir une courte note hypertexte avec un lien hypertexte vers le ou les nouveaux URI.

Si le code d'état 302 est reçu en réponse à une demande autre que GET ou HEAD, l'agent utilisateur NE DOIT PAS rediriger automatiquement la demande, sauf si l'utilisateur peut le confirmer, car cela pourrait modifier les conditions dans lesquelles la demande a été émise.

Une solution consiste à utiliser la méthode POST pour rompre l'auto-redirection côté client :

HttpPost request1 = new HttpPost("https://hrlink.healthnet.com/");
HttpResponse response1 = httpclient.execute(request1);

// expect a 302 response.
if (response1.getStatusLine().getStatusCode() == 302) {
  String redirectURL = response1.getFirstHeader("Location").getValue();

  // no auto-redirecting at client side, need manual send the request.
  HttpGet request2 = new HttpGet(redirectURL);
  HttpResponse response2 = httpclient.execute(request2);

  ... ...
}

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X