2012-04-26 14 views
6

He buscado por un tiempo y no encuentro una respuesta clara. Estoy intentando iniciar sesión en un webstie. https://hrlink.healthnet.com/ Este sitio web redirige a una página de inicio de sesión que no es obligatoria. Tengo que publicar mis credenciales de inicio de sesión a la URL redirigida.Obtener URL después de una redirección usando HttpClient.Execute (HttpGet)

Estoy tratando de codificar esto en Java, pero no entiendo cómo obtener la URL de la respuesta. Puede parecer un poco desordenado, pero lo tengo de esta manera mientras estoy probando.

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

Sé que redirecciona porque mis espectáculos de cuerda resultado ser la página real de inicio de sesión, pero no soy capaz de conseguir la nueva URL.

en Firefox estoy usando TamperData. Cuando navego a este sitio web https://hrlink.healthnet.com/ tengo un GET con un 302 - Encontrado y la ubicación de la página de inicio de sesión. A continuación, otro llegar a la sesión real Página

Cualquier ayuda es muy apreciada, gracias.

+0

posible duplicado de [HttpClient 4 - cómo capturar última URL de redireccionamiento] (http://stackoverflow.com/questions/1456987/httpclient-4-how-to-capture-last-redirect-url) – kolen

Respuesta

8

Salida w3c documentation:

10.3.3 302 Encontrado

El URI temporal debe ser dada por el campo Ubicación en la respuesta. A menos que el método de solicitud fuera HEAD, la entidad de la respuesta DEBERÍA contener una breve nota de hipertexto con un hipervínculo al nuevo URI (s).

Si el código de estado 302 se recibe en respuesta a una solicitud que no sea GET o HEAD, el agente de usuario NO DEBE redirigir automáticamente la solicitud a menos que pueda confirmarla el usuario, ya que esto podría cambiar las condiciones bajo las cuales se solicita se emitió.

Una solución es utilizar el método POST para romper redireccionamiento automático en el lado del cliente:

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

    ... ... 
} 

Espero que esto ayude.

Cuestiones relacionadas