簡體   English   中英

從Java程序驗證用戶身份-Java

[英]authenticate user from java program - java

我正在嘗試抓取需要身份驗證的網頁。 登錄后,我可以使用JSoup http://jsoup.org/庫來解析HTML頁面,從而在瀏覽器中訪問該頁面。

public static void main(String[] args) throws IOException {

    // need http protocol
    Document doc = Jsoup.connect("http://www.secinfo.com/$/SEC/Filing.asp?T=r643.91Dx_2nx").get();

    // get page title

    String title = doc.title();
    System.out.println("title : " + title);

    // get all links
    Elements links = doc.select("a");
    for (Element link : links) {                   
        // get the value from href attribute
        System.out.println("\nlink : " + link.attr("href"));                   
    }
            System.out.println();

  }

輸出:

title : SEC Info - Sign In

這是獲取登錄頁面的內容,而不是我傳遞的實際URL。 我已經在secinfo.com上注冊,並且在運行該程序時,從默認的瀏覽器Firefox登錄。

即使您使用默認瀏覽器登錄也無濟於事。 您的Java程序是一個單獨的過程,它不會與瀏覽器共享屏幕。

另一方面,secinfo需要身份驗證,而JSoup允許您傳遞身份驗證詳細信息。

當我通過身份驗證詳細信息時,它對我有用:

請檢查此答案( 具有基本訪問身份驗證的Jsoup連接

如果目標站點的登錄機制可以處理POST請求,則Jsoup的connect()也支持方法鏈接的post()

Document doc = Jsoup.connect("url")
  .data("aUserName", "myUserName")
  .data("aPassword", "myPassword")
  .userAgent("Mozilla")
  .timeout(3000)
  .post();

但是,如果您要獲取的頁面需要為每個請求發送后續的cookie ,該怎么辦? 嘗試在POST使用HttpURLConnection並從HTTP連接響應標頭讀取cookie HttpClient將使您更輕松地完成此任務。 使用該庫以字符串形式獲取網頁,然后將該字符串傳遞給jsoup.parse()函數以獲取文檔。

您必須使用post命令登錄,並保留返回的cookie。 那就是您的會話信息的存儲位置。 我在這里寫了一個示例: Jsoup無法在Page上登錄 該示例中的網站是一個例外,它設置了登錄頁面上已經存在的會話cookie。 如果適合您,則可以離開該步驟。

確切的發布命令可能因網站而異。 您必須從html中挖掘出來,或者必須在瀏覽器中安裝插件並攔截發布命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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