通過JAVA抓取頁面時有些頁面會返回(Unauthorized)響應狀態碼和wwwauthenticate響應頭來要求客戶端進行身份認證這種認證有兩種方式BASIC和DIGESTBASIC驗證要求客戶端對用戶名和密碼進行BASE編碼後傳送給服務器DIGEST的認證方式的細節比較復雜會經過一系列的加密所以很難被破譯
JAVA提供一個用於啟用身份認證的類可以支持HTTP協議中的多個認證方式這個類是Authenticator使用方法如下
Java 代碼
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/26467.html