2012-10-06 60 views
5

¿Cuál es la forma correcta de enviar una cookie "completa" a través de una URLConnection?¿Cómo enviar una cookie en un URLConnection?

He estado usando:

URL url = new URL(page); 
URLConnection urlConn = url.openConnection(); 

urlConn.setRequestProperty("Cookie", myCookie); 

urlConn.setUseCaches(true); 

urlConn.connect(); 

El valor MyCookie está TestCookie = d1lEZk9rSHd3WnpBd2JkWGRhN1RYdz09OkEwQ21pSFJVZzBpVDhhUENaK3ZPV2c9PQ

¿Hay una manera de enviar el Camino, Dominio y vence con ella? ¿Necesita codificar el valor de alguna manera?

Respuesta

3

Bueno, si sólo se está creando una cookie Creo que se puede hacer simplemente como:

urlConn.setRequestProperty("Cookie", "user=mary17; domain=airtravelbargains.com; path=/autos"); 

Si está configurando más de una galleta de lo que probablemente podría utilizar el método addRequestProperty lugar.

Para el atributo expires, asegúrese de usar el formato: Weekday, DD-Mon-AA HH: MM: SS GMT.

La única zona horaria legal es GMT, y los separadores entre los elementos de la fecha deben ser guiones.

12

This (currently accepted) answer está mal - para http clientes utiliza ; separador para varios valores de cookie, por lo que su ejemplo realmente envía tres Coookies:

  • user=mary17
  • domain=airtravelbargains.com
  • path=/autos

Si estuviéramos hablando de un ser Ver respuesta y Set-Cookie encabezado, la respuesta sería correcta, pero no estamos - urlconnection es para el cliente que se conecta al servidor.

¿Y qué hay de la Domain, Expires, Path información que usted pidió? El asunto es que no está significa para enviar esa información. Path, Domain y Expires son solo instrucciones que deben enviarse al navegador (o a cualquier otro cliente HTTP), ya que son instrucciones para el cliente. Solo debe enviar al servidor los valores válidos de cookie, por lo que no hay forma de enviar la información solicitada porque no tendría ningún sentido.

Puede ver esto usted mismo navegando por cualquier sesión HTTP que tenga en su navegador. El navegador solo enviará cosas como esta:

Cookie: cookiename=value; anothercookie=othervalue; 

Que es como se supone que debe ser.

O bien, puede inspeccionar RFC 6265, donde se pueden ver directamente desde la tabla de contenido que Domain, Expires, Path son atributos de la cabecera Set-Cookie (enviado al navegador), no de Cookie cabecera (enviada por el navegador o otro cliente http para el servidor).

Cuestiones relacionadas