如何在URL连接中发送cookie?

2022-09-03 17:09:00

通过 URLConnection 发送“完整”Cookie 的正确方法是什么?

我一直在使用:

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

urlConn.setRequestProperty("Cookie", myCookie); 

urlConn.setUseCaches(true); 

urlConn.connect();

myCookie 值 is testCookie=d1lEZk9rSHd3WnpBd2JkWGRhN1RYdz09OkEwQ21pSFJVZzBpVDhhUENaK3ZPV2c9PQ

有没有办法发送路径,域和过期?是否需要以某种方式对值进行编码?


答案 1

这个(目前接受的)答案是错误的 - 对于http客户端,你对多个cookie值使用分隔符,所以他的例子实际上发送了三个coookies:;

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

如果我们谈论的是服务器响应和标头,答案是正确的,但我们不是 - urlconnection用于客户端连接到服务器。Set-Cookie

那么,您要求的、信息呢?问题是,你不应该发送这些信息。路径、域和 Expires 只是要发送到浏览器(或任何其他 HTTP 客户端)的指令,因为它们是客户端的指令。您只能将有效的cookie发送到服务器,因此无法发送您请求的信息,因为它没有任何意义。DomainExpiresPath

您可以通过浏览浏览器中的任何HTTP会话来自己查看这一点。浏览器只会发送如下内容:

Cookie: cookiename=value; anothercookie=othervalue;

这是应该的。

或者,您可以检查 RFC 6265,从目录中可以直接看到 、 是 标头的属性(发送到浏览器),而不是标头的属性(由浏览器或其他 http 客户端发送到服务器)。DomainExpiresPathSet-CookieCookie


答案 2

好吧,如果你只是设置一个cookie,我想你可以简单地做:

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

如果您要设置多个 Cookie,则可以改用该方法。addRequestProperty

对于 expires 属性,请确保使用以下格式:工作日,DD-Mon-YY HH:MM:SS GMT。

唯一合法的时区是 GMT,日期元素之间的分隔符必须是短划线。


推荐