![](/img/trans.png)
[英]How to authenticate a regular Yammer user automatically from a Java program in a SSO enabled network?
[英]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.