轉帖|其它|編輯:郝浩|2010-06-09 10:02:11.000|閱讀 594 次
概述:通過JAVA抓取頁面時,有些頁面會返回401(Unauthorized)響應狀態碼和www-authenticate響應頭來要求客戶端進行身份認證。這種認證有兩種方式:BASIC和DIGEST,BASIC驗證要求客戶端對用戶名和密碼進行BASE64編碼后傳送給服務器。DIGEST的認證方式的細節比較復雜,會經過一系列的加密,所以很難被破譯。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
通過JAVA抓取頁面時,有些頁面會返回401(Unauthorized)響應狀態碼和www-authenticate響應頭來要求客戶端進行身份認證。這種認證有兩種方式:BASIC和DIGEST,BASIC驗證要求客戶端對用戶名和密碼進行BASE64編碼后傳送給服務器。DIGEST的認證方式的細節比較復雜,會經過一系列的加密,所以很難被破譯。
JAVA提供一個用于啟用身份認證的類,可以支持HTTP協議中的多個認證方式,這個類是java.net.Authenticator,使用方法如下:
Java 代碼
1.package com.xixuyishi; 2. 3.import java.io.BufferedReader; 4.import java.io.InputStream; 5.import java.io.InputStreamReader; 6.import java.net.Authenticator; 7.import java.net.PasswordAuthentication; 8.import java.net.URL; 9. 10.public class RunHttpSpnego { 11. 12. static final String kuser = "username"; // 用戶名 13. static final String kpass = "password"; // 密碼 14. static class MyAuthenticator extends Authenticator { 15. 16. @Override 17. public PasswordAuthentication getPasswordAuthentication() { 18. return (new PasswordAuthentication(kuser, kpass.toCharArray())); 19. } 20. } 21. 22. public static void main(String[] args) throws Exception { 23. Authenticator.setDefault(new MyAuthenticator()); 24. URL url = new URL(args[0]); 25. InputStream ins = url.openConnection().getInputStream(); 26. BufferedReader reader = new BufferedReader(new InputStreamReader(ins)); 27. String str; 28. while ((str = reader.readLine()) != null) 29. System.out.println(str); 30. } 31.} |
只需要創建一個繼續自Authenticator的類,并且重寫其中的getPasswordAuthentication()方法,將用戶名和密碼放入方法中,這樣在需要使用身份認證的地方實現這個類就可以了。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載