发新话题
打印

使用JAVA请求需要Basic身份验证的网页

使用JAVA请求需要Basic身份验证的网页

经过JAVA抓取页面时, 有些页面会前往401(Unauthorized)响应形态码和www-authenticate响应头来要求客户端停止身份认
证。 这种认证有两种方式:BASIC和DIGEST, BASIC验证要求客户端对用户名和密码停止BASE64编码后传送给服务器。 DIGEST的认证方
式的细节比拟复杂, 会经过一系列的加密, 所以很难被破译。  

  JAVA提供一个用于启用身份认证的类, 可以支持HTTP协议中的多个认证方式, 这个类是java. 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. Authenticator;

  7. import java. PasswordAuthentication;

  8. import java.汽车坐垫 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()方法, 将用户名
和密码放入方法中, 这样在需求运用身份认证的地方实现这个类就可以了。
jiyizhen-buy.com颈椎保健枕太空记忆枕 igerl.com歌瑞尔内衣

TOP

发新话题