歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux服務器

Java抓取需要客戶端身份認證的頁面的解決方案

通過JAVA抓取頁面時,有些頁面會返回401(Unauthorized)響應狀態碼和www-authenticate響應頭來要求客戶端進行身份認證。這種認證有兩種方式:BASIC和DIGEST,BASIC驗證要求客戶端對用戶名和密碼進行BASE64編碼後傳送給服務器。DIGEST的認證方式的細節比較復雜,會經過一系列的加密,所以很難被破譯。

JAVA提供一個用於啟用身份認證的類,可以支持HTTP協議中的多個認證方式,這個類是java.net.Authenticator,使用方法如下:

package com.xixuyishi;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.net.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,
kpass.toCharArray()));
}
}
public static void main(String[] args) throws Exception {
Authenticator.setDefault(new MyAuthenticator());
URL url = new URL(args[0]);
InputStream ins = url.openConnection().getInputStream();
BufferedReader reader = new BufferedReader(new
InputStreamReader(ins));
String str;
while ((str = reader.readLine()) != null)
System.out.println(str);
}

只需要創建一個繼續自Authenticator的類,並且重寫其中的getPasswordAuthentication()方法,將用戶名和密碼放入方法中,這樣在需要使用身份認證的地方實現這個類就可以了

Copyright © Linux教程網 All Rights Reserved