通過JAVA抓取頁面時
有些頁面會返回
(Unauthorized)響應狀態碼和www
authenticate響應頭來要求客戶端進行身份認證
這種認證有兩種方式
BASIC和DIGEST
BASIC驗證要求客戶端對用戶名和密碼進行BASE
編碼後傳送給服務器
DIGEST的認證方式的細節比較復雜
會經過一系列的加密
所以很難被破譯
JAVA提供一個用於啟用身份認證的類可以支持HTTP協議中的多個認證方式這個類是Authenticator使用方法如下
package comxixuyishi;
import javaioBufferedReader;
import javaioInputStream;
import javaioInputStreamReader;
import Authenticator;
import PasswordAuthentication;
import URL;
public class RunHttpSpnego {
static final String kuser = username; // 用戶名
static final String kpass = password; // 密碼
static class MyAuthenticator extends Authenticator {
@Override
public PasswordAuthentication
getPasswordAuthentication() {
return (new PasswordAuthentication(kuser
kpasstoCharArray()));
}
}
public static void main(String[] args) throws Exception {
AuthenticatorsetDefault(new MyAuthenticator());
URL url = new URL(args[]);
InputStream ins = urlopenConnection()getInputStream();
BufferedReader reader = new BufferedReader(new
InputStreamReader(ins));
String str;
while ((str = readerreadLine()) != null)
Systemoutprintln(str);
}
只需要創建一個繼續自Authenticator的類並且重寫其中的getPasswordAuthentication()方法將用戶名和密碼放入方法中這樣在需要使用身份認證的地方實現這個類就可以了
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26048.html