经过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()方法, 将用户名
和密码放入方法中, 这样在需求运用身份认证的地方实现这个类就可以了。