2012-04-26 9 views
6

Ho cercato un po 'e non trovo una risposta chiara. Sto cercando di accedere a un webstie. https://hrlink.healthnet.com/ Questo sito reindirizza a una pagina di accesso che non è consitant. Devo inviare le mie credenziali di accesso all'URL reindirizzato.Ottenere l'URL dopo un reindirizzamento utilizzando HttpClient.Execute (HttpGet)

Sto cercando di codificare questo in Java ma non capisco come ottenere l'URL dalla risposta. Potrebbe sembrare un po 'disordinato, ma ho questo modo mentre sto testando.

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(); 

so vengo reindirizzato perché i miei spettacoli stringa risultato essere la pagina di accesso reale, ma io non sono in grado di ottenere il nuovo URL.

In FireFox sto usando TamperData. Quando navigo su questo sito web https://hrlink.healthnet.com/, ho un GET con un 302 - Trovato e la posizione della pagina di accesso. Poi un altro OTTIENI alla pagina di login attuale

Qualsiasi aiuto è molto apprezzato grazie.

+0

possibile duplicato di [HttpClient 4 - come acquisire l'ultimo URL di reindirizzamento] (http://stackoverflow.com/questions/1456987/httpclient-4-how-to-capture-last-redirect-url) – kolen

risposta

8

Partenza w3c documentation:

10.3.3 302 Trovato

La temporanea URI DOVREBBE essere dato dal campo Posizione nella risposta. A meno che il metodo di richiesta fosse HEAD, l'entità della risposta DOVREBBE contenere una breve nota ipertestuale con un collegamento ipertestuale ai nuovi URI.

Se il codice di stato 302 viene ricevuto in risposta a una richiesta diversa da GET o HEAD, il programma utente NON DEVE automaticamente reindirizzare la richiesta a meno che non possa essere confermata dall'utente, poiché questo potrebbe modificare le condizioni in cui la richiesta è stato rilasciato.

Una soluzione è quella di utilizzare il metodo POST per rompere l'auto-reindirizzamento sul lato 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); 

    ... ... 
} 

Spero che questo aiuti.