我必须模仿Java代码的浏览器行为。
在将请求发送到服务器之前,我必须对请求设置两个cookie。
我这样做:
HttpURLConnection conn = ...
...
conn.addRequestProperty("Cookie", "IDS_SSO_ID=" + "onething");
conn.addRequestProperty("Cookie", "JSESSIONID=" + "otherthing"));
...
conn.close();
在服务器日志中,我看到'IDS_SSO_ID‘cookie被检索为"onething,JSESSIONID",这会导致错误。
注意,我没有访问服务器的权限,也没有服务器的源代码,我只有日志。
如何使用HttpURLConnection设置cookie?
因此,我创建了一个小演示;如果我使用“addRequestProperty”,那么就会发送一个不正确的cookie头:
URL url = new URL("https://en0hphl04qcwvf.x.pipedream.net/");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.addRequestProperty("Cookie", "JSESSIONID=akarmi123");
conn.addRequestProperty("Cookie", "IDS_SSO_ID=netudd321");
byte[] bytes = StreamUtils.copyToByteArray(conn.getInputStream());
System.out.println("response: " + new String(bytes));
conn.disconnect();
cookie头值是:JSESSIONID=akarmi123,IDS_SSO_ID=netudd321
如果我使用“setRequestProperty”并手动构造cookie标头,那么将发送一个正确的cookie头:
conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Cookie", "JSESSIONID=akarmi123; IDS_SSO_ID=netudd321");
bytes = StreamUtils.copyToByteArray(conn.getInputStream());
System.out.println("response: " + new String(bytes));
conn.disconnect();
cookie头值是:JSESSIONID=akarmi123;IDS_SSO_ID=netudd321
奇怪的是,web中的许多资源(这里也是如此)推荐了我的第一种方法--对addRequestProperty(.)的多次调用:
How to set Cookies at Http Get method using Java
https://www.codota.com/code/java/methods/java.net.URLConnection/addRequestProperty
http://www.massapi.com/method/ad/addRequestProperty-2.html
但他们似乎错了..。
发布于 2019-04-04 10:12:40
一种可能是通过执行以下操作来强制cookie字符串的正确连接:
conn.addRequestProperty("Cookie", "JSESSIONID=" + "otherthing" + ";IDS_SSO_ID=" + "onething");
你所描述的行为在我看来是一种意外的行为。
https://stackoverflow.com/questions/55512910
复制相似问题