如何在URLConnection中发送cookie?

E P*_*aiz 8 java cookies urlconnection

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

我一直在用:

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

urlConn.setRequestProperty("Cookie", myCookie); 

urlConn.setUseCaches(true); 

urlConn.connect();
Run Code Online (Sandbox Code Playgroud)

所述的myCookie值为testCookie = d1lEZk9rSHd3WnpBd2JkWGRhN1RYdz09OkEwQ21pSFJVZzBpVDhhUENaK3ZPV2c9PQ

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

eis*_*eis 18

这个(当前接受的)答案是错误的 - 对于http 客户端,您使用;分隔符来表示多个cookie值,因此他的示例实际上发送了三个coookies:

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

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

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

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

Cookie: cookiename=value; anothercookie=othervalue;
Run Code Online (Sandbox Code Playgroud)

这是应该的.

或者,你可以检查RFC 6265,在那里你可以从内容的表格直接看到Domain,Expires,Path是属性Set-Cookie头(发送到浏览器),而不是Cookie头(通过浏览器或其他HTTP客户端发送到服务器).


Edw*_*rzo 5

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

urlConn.setRequestProperty("Cookie", "user=mary17; domain=airtravelbargains.com; path=/autos");
Run Code Online (Sandbox Code Playgroud)

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

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

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