2012-10-06 2 views
5

Quelle est la bonne façon d'envoyer un cookie «complet» à travers une connexion URLConnection?Comment envoyer un cookie dans un URLConnection?

Je me sers:

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

urlConn.setRequestProperty("Cookie", myCookie); 

urlConn.setUseCaches(true); 

urlConn.connect(); 

La valeur MonCookie est TestCookie = d1lEZk9rSHd3WnpBd2JkWGRhN1RYdz09OkEwQ21pSFJVZzBpVDhhUENaK3ZPV2c9PQ

Yat-il un moyen d'envoyer le chemin, le domaine et avec elle expire? Avez-vous besoin d'encoder la valeur d'une manière ou d'une autre?

Répondre

3

Eh bien, si vous ne définissez un cookie, je suppose que vous pouvez simplement faire comme:

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

Si vous configurez plus d'un cookie que vous pourriez probablement utiliser la méthode addRequestProperty à la place.

Pour l'attribut expires, assurez-vous d'utiliser le format: Jour de la semaine, JJ-Lun-AA HH: MM: SS GMT.

Le seul fuseau horaire légal est GMT, et les séparateurs entre les éléments de la date doivent être tirets.

12

This (currently accepted) answer est faux - pour http clients vous utilisez le séparateur ; pour plusieurs valeurs de cookies, de sorte que son exemple envoie en fait trois coookies:

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

Si nous parlions d'un ser ver réponse et Set-Cookie en-tête, la réponse serait juste, mais nous ne sommes pas - urlconnection est pour le client se connecter au serveur.

Alors, qu'en est-il de l'information Domain, Expires, Path alors que vous avez demandé? La chose est, vous n'êtes pas signifiait pour envoyer cette information. Path, Domain et Expires sont uniquement des instructions destinées à être envoyées au navigateur (ou à tout autre client HTTP), car ce sont des instructions pour le client. Vous êtes uniquement destiné à envoyer les valeurs du cookie valide au serveur, il n'y a donc aucun moyen d'envoyer les informations que vous avez demandées car cela n'aurait aucun sens.

Vous pouvez voir cela vous-même en parcourant n'importe quelle session HTTP que vous avez dans votre navigateur. Le navigateur n'enverra que des choses comme ceci:

Cookie: cookiename=value; anothercookie=othervalue; 

Ce qui est censé être.

Ou, vous pouvez inspecter RFC 6265, où vous pouvez voir directement à partir de la table des matières qui Domain, Expires, Path sont les attributs de l'en-tête Set-Cookie (envoyé au navigateur), et non de Cookie tête (envoyé par le navigateur ou autre client http sur le serveur).