首页 > 解决方案 > 如何从 HttpURLConnection [Java 11] 中检索 cookie

问题描述

我需要在向服务器发出 POST 请求(成功登录请求)后检索 cookie 集。

在 Postman 中,我可以看到响应标头以及响应 cookie。在我的代码中,我可以获得相同的响应标头,但我不确定如何获取我需要的 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());
  }

该方法工作正常,并且每次都像 Postman 那样获取预期的标题: 在此处输入图像描述

如何从我的 Java 方法中获取“Cookie 值”?

标签: javahttpwebnetwork-programming

解决方案


推荐阅读