随后的Java HTTPS POST请求保留了cookie



我需要获得一个HTTPS URL的输入流。https://baseurl.com/mypdfgenerated.php?param=somevalue。为了访问这个URL,我需要通过登录页面(例如。https://baseurl.com/login.php)通过提供BODY参数:

user_name, web_pwd and submit_login 

我假设成功访问第一个URL的唯一方法是POST到/login.php,然后存储cookie,然后在下一个GET请求中重用cookie-session-ID;如果这是正确的方法,那么有人可以与正确/最近的库分享一个解决方案吗?

不确定哪是最好的方法,但帮助我实现这一点的是CloseableHttpClient类,它与BasicCookieStore一起保留cookies,用于后续请求,一旦登录,实现如下:

BasicCookieStore cookieStore = new BasicCookieStore(); 
CloseableHttpClient httpclient = HttpClients.custom().setDefaultCookieStore(cookieStore).build(); 
HttpUriRequest login = RequestBuilder.post()
                    .setUri(new URI(url_login))
                    .addParameter("login", "loginuname")
                    .addParameter("password", "pwd")
                    .addParameter("submit", "sub_mit");
CloseableHttpResponse response = httpclient.execute(login);
List<Cookie> cookies = cookieStore.getCookies();
response.close();
HttpGet httpget2 = new HttpGet(url_to_get_after_login);
CloseableHttpResponse response2 = httpclient.execute(httpget2);
response2.close();

您应该使用一个库来为您处理cookie,例如Apache HTTPClient。

Java示例中的示例代码片段

try { 
    System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
    java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); 
    URL url = new URL("https://www.yourwebsite.com/"); // Some URL
    HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
    connection.setDoInput(true); 
    connection.setDoOutput(true);
    connection.setRequestMethod("POST"); 
    connection.setFollowRedirects(true); 
    String query = "UserID=" + URLEncoder.encode("username"); 
    query += "&"; 
    query += "password=" + URLEncoder.encode("password"); 
    query += "&"; 
    // open up the output stream of the connection 
    DataOutputStream output = new DataOutputStream( connection.getOutputStream() ); 
    // write out the data 
    output.writeBytes( query ); 
}catch(Exception err){
    err.printStackTrace();
}

查看cookie的使用

最新更新