Как получить куки из HttpURLConnection [Java 11] - PullRequest
0 голосов
/ 17 января 2020

Мне нужно получить готовый набор ie, установленный после POST-запроса к серверу (успешный запрос входа в систему).

В Почтальоне я могу видеть заголовок ответа, но также и куки-файлы ответа. В своем коде я могу получить те же заголовки ответа, но я не уверен, как получить нужные мне файлы cookie.

Вот мой код:

public void sendPost(String url, String postParams) throws Exception {
    URL obj = new URL(url);
    conn = (HttpURLConnection) obj.openConnection();

    // Acts like a browser
    conn.setUseCaches(false);
    conn.setRequestMethod("POST");
    conn.setRequestProperty("User-Agent", "Mozilla/5.0"); // mock a web browser
    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");
    for (String cookie : this.cookies) {
      conn.addRequestProperty("Cookie", cookie.split(";", 1)[0]);
    }
    conn.setRequestProperty("Connection", "keep-alive");
    conn.setRequestProperty("Referer", "https://accounts.google.com/ServiceLoginAuth");
    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    conn.setRequestProperty("Content-Length", Integer.toString(postParams.length()));

    conn.setDoOutput(true);
    conn.setDoInput(true);

    // Send post request
    DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
    wr.writeBytes(postParams);
    wr.flush();
    wr.close();

    Map<String, List<String>> headerFields = conn.getHeaderFields();

    // !!!! got header files -> now try to get cookies some way !!!
    List<String> cookies = headerFields.get("Set-Cookie"); // ---> null

    int responseCode = conn.getResponseCode();
    System.out.println("\nSending 'POST' request to URL : " + url);
    System.out.println("Post parameters : " + postParams);
    System.out.println("Response Code : " + responseCode);

    BufferedReader in = new BufferedReader(new          
            InputStreamReader(conn.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
    }
    in.close();
    System.out.println(response.toString());
  }

Метод работает нормально и получает ожидаемые заголовки каждый раз, как это делает Почтальон: enter image description here

Как мне получить "Cook ie value" из моего Java метода?

...