2009-09-21 21 views
8

Estoy tratando de realizar una solicitud a una página web que requiere cookies. Estoy usando HttpURLConnection, pero la respuesta siempre regresa diciendoCookies desactivadas con Java URLConnection

<div class="body"><p>Your browser's cookie functionality is turned off. Please turn it on. 

¿Cómo puedo realizar la solicitud de tal manera que el servidor consultado cree que tengo activadas las cookies. Mi código es algo como esto.

private String readPage(String page) throws MalformedURLException { 
    try { 
     URL url = new URL(page); 
     HttpURLConnection uc = (HttpURLConnection) url.openConnection(); 
     uc.connect(); 

     InputStream in = uc.getInputStream(); 
     int v; 
     while((v = in.read()) != -1){ 
      sb.append((char)v); 
     } 
     in.close(); 
     uc.disconnect(); 
    } catch (IOException e){ 
     e.printStackTrace(); 
    } 
    return sb.toString(); 
} 

Respuesta

10

es necesario agregar un CookieHandler al sistema para que la manija de la galleta. Antes de Java 6, no hay implementación de CookieHandler en el JRE, debe escribir la suya propia. Si usted está en Java 6, se puede hacer esto, la administración de cookies

CookieHandler.setDefault(new CookieManager()); 

de URLConnection es muy débil. Apenas funciona. No maneja todas las reglas de cookies correctamente. Debería usar Apache HttpClient si está tratando con cookies sensibles como la autenticación.

+0

ahora necesito averiguar cómo hacer la autenticación proxy http. Lo tuve trabajando con URLConnection, pero ahora necesito resolverlo aquí. tsok, google prolly encontrará algo para mí;) gracias! – dharga

1
uc.getHeaderFields() 
// get cookie (set-cookie) here 

URLConnection conn = url.openConnection(); 
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2"); 
conn.addRequestProperty("Referer", "http://xxxx"); 
conn.addRequestProperty("Cookie", "..."); 
-4

Si intenta raspar grandes volúmenes de datos después de un inicio de sesión, puede que sea mejor con un raspador web con guiones como WebHarvest (http://web-harvest.sourceforge.net/) Lo he utilizado con gran éxito en algunos de mis proyectos.

2

Creo que el servidor no puede determinar en la primera solicitud que un cliente no admite cookies. Entonces, probablemente el servidor envíe redirecciones. Intenta deshabilitar redirecciones:

uc.setInstanceFollowRedirects(false); 

entonces usted será capaz de obtener las cookies de respuesta y usarlos (si es necesario) en la siguiente solicitud.

Cuestiones relacionadas