解決Java抓取頁面遇到客戶端身份認證的辦法

悠悠隱於市發表於2011-03-18
解決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()方法,將使用者名稱和密碼放入方法中,這樣在需要使用身份認證的地方實現這個類就可以了。


轉載至http://www.cn-java.com/www1/?uid-631851-action-viewspace-itemid-61967
 

 

相關文章