带有 "Cookie" 的 HttpURLConnection addRequestProperty 导致以逗号分隔的 Cookie 字符串?
HttpURLConnection addRequestProperty with "Cookie" resulting in comma separated Cookie string?
我必须从 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 header:
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 header值为:JSESSIONID=akarmi123,IDS_SSO_ID=netudd321
如果我使用 'setRequestProperty' 并手动构建 cookie header,则会发送正确的 cookie header:
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 header值为:JSESSIONID=akarmi123; IDS_SSO_ID=netudd321
奇怪的是,网络上的很多资源(这里也有 SO)推荐我的第一种方法——多次调用 addRequestProperty(...):
https://www.codota.com/code/java/methods/java.net.URLConnection/addRequestProperty
http://www.massapi.com/method/ad/addRequestProperty-2.html
但是他们好像错了...
一种可能是通过执行以下操作强制正确连接 cookie 字符串:
conn.addRequestProperty("Cookie", "JSESSIONID=" + "otherthing" + ";IDS_SSO_ID=" + "onething");
您描述的行为在我看来是意外行为。
我必须从 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 header:
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 header值为:JSESSIONID=akarmi123,IDS_SSO_ID=netudd321
如果我使用 'setRequestProperty' 并手动构建 cookie header,则会发送正确的 cookie header:
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 header值为:JSESSIONID=akarmi123; IDS_SSO_ID=netudd321
奇怪的是,网络上的很多资源(这里也有 SO)推荐我的第一种方法——多次调用 addRequestProperty(...):
https://www.codota.com/code/java/methods/java.net.URLConnection/addRequestProperty
http://www.massapi.com/method/ad/addRequestProperty-2.html
但是他们好像错了...
一种可能是通过执行以下操作强制正确连接 cookie 字符串:
conn.addRequestProperty("Cookie", "JSESSIONID=" + "otherthing" + ";IDS_SSO_ID=" + "onething");
您描述的行为在我看来是意外行为。