4

我正在向一个 HTTPS URL 发送一个获取请求,并且不知何故我得到了“Set-Cookie”的空值。迭代时,我可以看到 header-key 具有“set-cookie”,但 header-value 为空。

这是我的代码:

URL obj = new URL(url);
HttpsURLConnection conn = (HttpsURLConnection) obj.openConnection();
HttpsURLConnection.setFollowRedirects(false);


conn.setRequestProperty("User-Agent", USER_AGENT);
conn.setRequestProperty("Accept",
            "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
conn.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
conn.setRequestProperty("Connection", "keep-alive");
conn.setRequestProperty("Accept-Encoding", "gzip, deflate");
conn.connect();

Map em = conn.getHeaderFields();
System.out.println("header Values......" + em.toString());

String headerName = null;   

for (int i = 1; (headerName = conn.getHeaderFieldKey(i)) != null; i++) 
{
     System.out.println("Header Nme : " + headerName);
     System.out.println(conn.getHeaderField(i));

}

输出:

标头值......{null=[HTTP/1.1 200 OK], x-wily-info=[Clear guid=0BE0EC9D0A7E67816C471FA946FD2EBB], Date=[Sat, 29 Mar 2014 03:27:41 GMT], Content-长度=[8106],x-wily-servlet=[*******************],X-FRAME-OPTIONS=[SAMEORIGIN],连接=[关闭],内容类型=[文本/html;字符集=UTF-8]}

标题名称:日期
2014 年 3 月 29 日星期六 03:27:41 GMT
标题名称:X-FRAME-OPTIONS
同源
标题名称:x-wily-info
清除 guid=0BE0EC9D0A7E67816C471FA946FD2EBB
标题名称:x-wily-servlet
*****************************
标题名称:内容类型
文本/html;charset=UTF-8
标头名称:内容长度
8106
**标头名称:Set-Cookie
无效的
标头名称:Set-Cookie
无效的**
标题名称:连接
关
响应代码:200

从浏览器我可以看到下面:

连接关闭
内容长度 8106
内容类型 text/html;charset=UTF-8
日期 2014 年 3 月 29 日星期六 02:20:31 GMT
设置 Cookie JSESSIONID=************************;路径=/****; 安全的; **HttpOnly**
Set-Cookie loginToken=*************;Path=/****/login/LoginProcess.do; **HttpOnly**; 安全的
X-FRAME-OPTIONS SAMEORIGIN
x-wily-info 清除 guid=0BA36F4A0A7E67816C471FA938E304CA
x-wily-servlet *****************************************

我在许多 HTTPS URL 上都尝试了相同的方法,它们都工作正常,这只是造成问题;我注意到的主要区别是该服务器实际上将 cookie 作为“HttpOnly”发送。是否引起问题?

4

4 回答 4

2

可能是,这个 url 上有一个重定向,你可以在获取 inputstream 之前尝试这个:

httpURLConnection.setInstanceFollowRedirects(false);  
于 2017-03-22T03:12:48.377 回答
2

由于 XSS 问题,这似乎是一个功能。

https://bugs.openjdk.java.net/browse/JDK-6890023

于 2016-02-12T16:04:08.010 回答
0

还有一个错误报告表明“HttpUrlConnection Set-Cookie Header lost with WebStart”的问题也影响版本 7u67、8、9。 https://bugs.openjdk.java.net/browse/JDK-8055829

于 2016-03-25T01:51:04.493 回答
-1

创建您的 cookie 并尝试像这样设置属性。另外,在设置之前,请查看正确的 cookie 如何从网络中查看的语法

 connection.setRequestProperty("Cookie", myCookie);
于 2014-03-29T04:25:16.797 回答