我需要获得一个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的使用