Java:使用POST登录时处理cookie

Clo*_*bot 2 java cookies post login urlconnection

我在登录Java中的任何站点时遇到了一些麻烦.我正在使用默认的URL连接POST请求,但我不确定如何正确处理cookie.我试过这个指南:http://www.hccp.org/java-net-cookie-how-to.html但是无法让它运转起来.我基本上已经尝试了几天了,如果有人想帮助我,我真的需要帮助.

我可能会被告知它很乱,我应该使用一个自定义库来实现这个目的.我尝试下载一个,但不知道如何设置和工作.我现在已经尝试了几个小时的各种事情,它只是不起作用.我宁愿用标准的URL连接来做这件事,但是如果有人能帮助我让另一个图书馆工作,那就更好了,那也很棒.

如果有人可以发布我可以学习的工作来源,我将非常感激.我需要的是:将登录数据POST到站点 - >从站点获取并存储cookie - >使用带有下一个URL连接请求的cookie来获取站点的登录版本.

谁能帮我这个?非常感谢.这确实意味着很多.如果有人想帮我实时帮助,请留下即时通讯地址.非常感谢你的时间.

aio*_*obe 5

这段代码适合我:

获取登录表单(在我的情况下,当我检索登录页面时实际设置了cookie)

    URL url = new URL(formPage);
    URLConnection conn = url.openConnection();

    String cookieHeader = conn.getHeaderFields().get("Set-Cookie").get(0);
    Matcher m = JSESSION_PATTERN.matcher(cookieHeader);
    m.find();
    jSessionId = m.group(1);
Run Code Online (Sandbox Code Playgroud)

我也需要获取一个csrf值,但我现在会省略它.

我然后登录:

    URL url = new URL(formPage);

    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

    conn.setRequestProperty("Cookie", "JSESSIONID=" + encode(jSessionId, "UTF-8")); 

    conn.setRequestMethod("POST");
    conn.setDoOutput(true);
    conn.setDoInput(true);

    DataOutputStream out = new DataOutputStream(conn.getOutputStream());
    out.writeBytes(String.format("_csrf_token=%s&xyz=%s&zyx=%s",
            encode(csrfToken, "UTF-8"),
            encode(USER, "UTF-8"),
            encode(PASS, "UTF-8")));

    out.close();

    // I have absolutely no idea why this is needed.
    conn.getInputStream().close();


    String cookieHeader = conn.getHeaderFields().get("Set-Cookie").get(0);
    Matcher m = JSESSION_PATTERN.matcher(cookieHeader);
    m.find();
    jSessionId = m.group(1);
Run Code Online (Sandbox Code Playgroud)

然后我可以使用检索和处理页面

    URL url = new URL(thePage);
    URLConnection conn = url.openConnection();

    conn.setRequestProperty("Cookie", "JSESSIONID=" + encode(jSessionId, "UTF-8")); 

    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    String str;
    while ((str = in.readLine()) != null) {
        // process str...
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!