2012-10-06 3 views
5

Qual è il modo corretto di inviare un cookie "completo" su un URLConnection?Come inviare un cookie in un URLConnection?

ho usato:

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

urlConn.setRequestProperty("Cookie", myCookie); 

urlConn.setUseCaches(true); 

urlConn.connect(); 

Il valore MyCookie è TestCookie = d1lEZk9rSHd3WnpBd2JkWGRhN1RYdz09OkEwQ21pSFJVZzBpVDhhUENaK3ZPV2c9PQ

C'è un modo per inviare il percorso, di dominio, e scade con esso? Hai bisogno di codificare il valore in qualche modo?

risposta

3

Beh, se si sta solo impostando un cookie credo che si potrebbe semplicemente fare come:

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

Se stai configurando più di un biscotto di quanto si potrebbe forse utilizzare il metodo addRequestProperty invece.

Per l'attributo expires, assicurarsi di utilizzare il formato: Weekday, GG-Mon-AA HH: MM: SS GMT.

L'unico fuso orario legale è GMT e i separatori tra gli elementi della data devono essere i trattini .

12

This (currently accepted) answer è sbagliato - per http clienti si utilizza ; separatore per più valori dei cookie, quindi il suo esempio in realtà invia tre coookies:

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

Se stessimo parlando di un ser ver risposta e Set-Cookie intestazione, la risposta sarebbe giusta, ma non lo siamo - urlconnection è per il client che si connette al server.

Quindi, per quanto riguarda le informazioni Domain, Expires, Path che hai richiesto? Il fatto è che tu non sei significava per inviare quell'informazione. Path, Domain and Expires sono solo istruzioni che devono essere inviate al browser (o qualsiasi altro client HTTP), poiché sono istruzioni per il client. Devi solo inviare il cookie valido valori al server, quindi non c'è modo di inviare le informazioni richieste perché non avrebbe alcun senso.

Puoi vederlo da solo sfogliando qualsiasi sessione HTTP che hai nel tuo browser. Il browser invierà solo cose del genere:

Cookie: cookiename=value; anothercookie=othervalue; 

Quale è come dovrebbe essere.

In alternativa, è possibile controllare RFC 6265, dove si può vedere direttamente dalla tabella dei contenuti che Domain, Expires, Path sono attributi della Set-Cookie intestazione (inviato al browser), non di Cookie intestazione (inviato dal browser o altro client http sul server).