Java: Cómo hacer una sesión de navegación HTTP

Estoy tratando de hacer una aplicación Java que envíe algunas solicitudes POST a un servidor. La primera solicitud es la que tiene información de autenticación. Luego, cuando envío la siguiente solicitud, recibo la respuesta de que mi sesión ha caducado. Pero estoy enviando la siguiente solicitud en el mismo segundo, por lo tanto, no puede agotarse el tiempo.

Así que supongo que hay algo como una sesión HTTP en Java, que necesito usar para enviar mi solicitud de manera que el servidor sepa que sigue la solicitud anterior.

He estado buscando en Google, pero no puedo encontrar nada. Sólo algo sobre Servlets. Pero estoy creando una aplicación de escritorio.

PD: Soy nuevo en el envío de solicitudes HTTP y este tipo de cosas.

Gracias por adelantado,
Martijn


Editar: Este es el código que uso actualmente:

import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; /** * * @author martijn */ public class PostRequest { private String _url; private List params; public PostRequest(String url) { this._url = url; this.params = new ArrayList(); } public void addParam(String key, String value) { params.add(new PostParameter(key, value)); } public String getURL() { return _url; } public InputStream request() throws IOException { URL url = new URL(this._url); URLConnection conn = url.openConnection(); if (params.size() > 0) { conn.setDoOutput(true); StringBuilder data = new StringBuilder(); for (int i = 0; i  0) { data.append("&"); } String key = params.get(i).key; String value = params.get(i).value; data.append(URLEncoder.encode(key, "UTF-8")); data.append("="); data.append(URLEncoder.encode(value, "UTF-8")); } OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write(data.toString()); wr.flush(); } return conn.getInputStream(); } public class PostParameter { public String key; public String value; public PostParameter(String key, String value) { this.key = key; this.value = value; } public PostParameter() { } public String getKey() { return key; } public String getValue() { return value; } public void setKey(String key) { this.key = key; } public void setValue(String value) { this.value = value; } } } 

Y luego enviar dos solicitudes uno tras otro:

 PostRequest postAuthentication = new PostRequest("http://blahblah.com"); postAuthentication.addParam("user", user); postAuthentication.addParam("password", pass); Utils.dumpReader(postAuthentication.request()); PostRequest postDoSomething = new PostRequest("http://blahblah.com/function.php"); postDoSomething.addParam("func", "blah"); postDoSomething.addParam("value", "14"); Utils.dumpReader(postDoSomething.request()); // Here I'm getting the session is expired. 

Estos te ayudarán a:

  • Apache HttpComponents
  • Apache HttpClient

Si el ID de la sesión se almacena en cookies, debe proporcionar una forma de almacenar las cookies y pasarlas a la segunda solicitud. Consulte este ejemplo para el manejo de cookies en el cliente HTTP de Apache .

Cuando recibe respuesta a la solicitud de autenticación, necesita almacenar información sobre la sesión. Cuando envíe la siguiente solicitud, debe agregar información de la sesión para solicitarla.

http://en.wikipedia.org/wiki/HTTP_cookie

El servidor probablemente se basa en cookies de sesión HTTP (solo) para rastrear solicitudes. Tendrá que analizar el tráfico HTTP al servidor (cuando use un navegador) para ver si este es el caso. El servidor proporciona cookies al cliente, a través del encabezado de respuesta Set-Cookie .

Si la suposición es cierta, que se requieren cookies, entonces la cookie debe suministrarse en cada solicitud del cliente al servidor. Esto se hace cuando el cliente configura un encabezado de solicitud de Cookie .

Supongo que está utilizando la clase HttpUrlConnection proporcionada por la API de Java. Balus tiene una respuesta muy completa sobre este tema en StackOverflow. Consulte la sección “Mantenimiento de la sesión”.