在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?你需要以某种方式对值进行编码吗?
答案 0 :(得分:17)
This (currently accepted) answer错误 - 对于http 客户端,您使用;
分隔符表示多个Cookie值,因此他的示例实际上发送了三个coookies:
user=mary17
domain=airtravelbargains.com
path=/autos
如果我们讨论的是服务器响应和Set-Cookie
标题,答案是正确的,但我们不是 - urlconnection是客户端连接到服务器的。
那么您要求的Domain
,Expires
,Path
信息呢?问题是,您意味着发送该信息。路径,域和过期只是要发送到浏览器(或任何其他HTTP客户端)的指令,因为它们是客户端的指令。您只是想将有效的Cookie 值发送到服务器,因此无法发送您要求的信息,因为它没有任何意义。
您可以通过浏览浏览器中的任何HTTP会话来自行查看。浏览器只会发送这样的内容:
Cookie: cookiename=value; anothercookie=othervalue;
这是应该的。
或者,您可以检查RFC 6265,您可以直接从目录中看到Domain
,Expires
,Path
是{{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,日期元素之间的分隔符必须是 破折号。