如何在URLConnection中发送cookie?

时间:2012-10-06 15:52:28

标签: java cookies urlconnection

在URLConnection上发送“完整”cookie的正确方法是什么?

我一直在使用:

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

urlConn.setRequestProperty("Cookie", myCookie); 

urlConn.setUseCaches(true); 

urlConn.connect();

myCookie值是 testCookie = d1lEZk9rSHd3WnpBd2JkWGRhN1RYdz09OkEwQ21pSFJVZzBpVDhhUENaK3ZPV2c9PQ

有没有办法用它发送Path,Domain和Expires?你需要以某种方式对值进行编码吗?

2 个答案:

答案 0 :(得分:17)

This (currently accepted) answer错误 - 对于http 客户端,您使用;分隔符表示多个Cookie值,因此他的示例实际上发送了三个coookies:

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

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

那么您要求的DomainExpiresPath信息呢?问题是,您意味着发送该信息。路径,域和过期只是要发送到浏览器(或任何其他HTTP客户端)的指令,因为它们是客户端的指令。您只是想将有效的Cookie 发送到服务器,因此无法发送您要求的信息,因为它没有任何意义。

您可以通过浏览浏览器中的任何HTTP会话来自行查看。浏览器只会发送这样的内容:

Cookie: cookiename=value; anothercookie=othervalue;

这是应该的。

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

答案 1 :(得分:5)

好吧,如果你只是设置一个cookie,我想你可以这样做:

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

如果你设置了多个cookie,那么可能会使用addRequestProperty方法。

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

唯一的合法时区是GMT,日期元素之间的分隔符必须是 破折号。