![](/img/trans.png)
[英]Auto login on website, stay logged in, and parse with Jsoup (java)
[英]How can I login to a website using Java and stay logged in?
所以我想做的是登錄到我們公司使用的Web應用程序,我需要下載多個圖表(准確地說是45個),我有一個程序可以完全按照我的意願進行操作,但是我的代碼有效,每次都必須登錄。 我不確定這是否是一個問題(對於Web應用程序的管理員可能看起來很可疑),但似乎效率不高。 理想情況下,我想登錄一次該站點,然后將它們移至我需要下載圖像的任何Urls。 你們可以提供的任何幫助都是很棒的。
for (int i = 1; i <= 45; i++) {
URL url;
if(i<10) {
url = new URL("http://127.0.0.1:3333/website/image0"+i);
}
else{
url = new URL("http://127.0.0.1:3333/website/image"+i);
}
String loginPassword = "usrName" + ":" + "PassWrd";
String encoded = new sun.misc.BASE64Encoder().encode(loginPassword.getBytes());
URLConnection conn = url.openConnection();
conn.setRequestProperty("Authorization", "Basic " + encoded);
String destName = "C:\\Users\\Name\\Documents\\Report\\p"+i+".png";
InputStream in = new BufferedInputStream(conn.getInputStream());
OutputStream os = new FileOutputStream(destName);
byte[] b = new byte[2048];
int length;
while ((length = in.read(b)) != -1) {
os.write(b, 0, length);
}
in.close();
os.close();
}
這在很大程度上取決於您要獲取圖像的網站。 在大多數情況下,網站會使用Cookies來跟蹤您已登錄的事實。
Java為此提供了一個專門用於HttpUrlConnection的類 : CookieHandler
使用該類將默認處理程序設置為CookieManager可能足以讓您保持登錄狀態。
CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));
// null for the CookieStore means CookieManager will use an in-memory implementation
// And CookiePolicy.ACCEPT_ALL means that this CookieHandler will accept
// all cookies
如果您的網站使用其他東西來標識其用戶,則您將不得不對該流程進行反向工程並在程序中實現。 通常,盡管瀏覽器可以完成的所有操作也都可以使用Java來完成,所以應該總是可行的。
編輯:寫完這本書之后,我才意識到您的網站使用的是HTTP身份驗證。 在這種情況下,Cookie並不會真正幫助您,因為無論如何您已經重新授權了每個請求。 HTTP本身沒有狀態,因此服務器根本不會記住您已經登錄的狀態。如果這是用戶訪問這些圖像的唯一方法,那么就不會有任何可疑之處,因為瀏覽器還必須在每次請求時都重新發送用戶名和密碼。
我建議將編碼后的字符串保存在某個地方,以免每次都重新生成它。
我仍然保留Cookie的內容,因為在身份驗證機制不同的情況下,它可能仍會有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.