HttpURLConnection addRequestProperty с «Cookie», приводящий к строке cookie, разделенной запятыми? - PullRequest
0 голосов
/ 04 апреля 2019

Я должен эмулировать поведение браузера из кода Java.

Мне нужно установить два куки на запрос перед отправкой их на сервер.

Я делаю это:

HttpURLConnection conn = ...
...
conn.addRequestProperty("Cookie", "IDS_SSO_ID=" + "onething");
conn.addRequestProperty("Cookie", "JSESSIONID=" + "otherthing"));
...
conn.close();

В журналах сервера я вижу, что cookie 'IDS_SSO_ID' извлекается как "onething, JSESSIONID", что вызывает ошибку.

Обратите внимание, что у меня нет доступа ни к серверу, ни к его исходному коду, у меня есть только логи.

Как мне устанавливать куки, используя HttpURLConnection?


Итак, я создал небольшую демонстрацию;Если я использую 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

Странно то, что большое количество ресурсов в Интернете (и здесь, в том числе и в SO) рекомендует мой первый подход - множественные вызовы addRequestProperty (...):

Как установить Cookies на Http Get метод с использованием Java

https://www.codota.com/code/java/methods/java.net.URLConnection/addRequestProperty

https://www.programcreek.com/java-api-examples/?class=java.net.HttpURLConnection&method=addRequestProperty

http://www.massapi.com/method/ad/addRequestProperty-2.html

Но похоже, что они не правы ...

1 Ответ

1 голос
/ 04 апреля 2019

Можно было бы обеспечить правильное объединение строк cookie, выполнив следующие действия:

conn.addRequestProperty("Cookie", "JSESSIONID=" + "otherthing" + ";IDS_SSO_ID=" + "onething");

Поведение, описанное вами, выглядит для меня как непреднамеренное поведение.

...