如何在URLConnection中发送cookie?

在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? 你需要以某种方式对值进行编码吗?

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

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

如果您设置多个cookie,则可能使用addRequestProperty方法。

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

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

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

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

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

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

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

 Cookie: cookiename=value; anothercookie=othervalue; 

这是应该的。

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