簡體   English   中英

如何使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM