虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。
HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
HttpClient 功能介绍
以下列出的是 HttpClient 提供的主要的功能,要知道更多详细的功能可以参见 HttpClient 的主页。
实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
支持自动转向
支持 HTTPS 协议
支持代理服务器等
任何用户 身份验证过程需要一套可以来确定的凭据。在最简单形式任何用户 身份验证过程需要一套可以来确定的凭据。
在最简单形式crednetials可以只是一 个用户名 /密码对。 UsernamePasswordCredentials代表了一个安全主体组成的凭据和明文密码。
Authentication schemes (认证 模式)
注意验证 模式 可能涉及的状态 应答式 交换。 HttpClient 有几个 AuthScheme实现:
l Basic:基本身份验证 模式 在 RFC 2617中定义。这种身份验证 中定义。这种身份验证模式是不安全的,因为凭据以明文形式传 输。
尽管 它不安全 ,如果 与 TLS / SSL加密技术结合使用 ,基本验证模式是 十分满足需求的 。
2 Digest:摘要式身份验证 模式 在 2617 中定义。摘要式身份验证方案是大大超过基本安全, 对于 那 些不想应用程序通过 TLS / SSL加密安全传输 ,
Basic是一个 不错的选择。
3 NTLM:NTLM是微软 Windows平台开发和优化 专有的认证模式 。 NTLM被认为 比摘要 更安全。这个模式 是需要一个外部 NTLM身份引擎能够发挥作用。
http请求发出:
UsernamePasswordCredentials cred = new UsernamePasswordCredentials(userName, password);
public HttpResponse doExcute(HttpEntityEnclosingRequestBase httpRequest ) throws ConnectionMainException {
HttpResponse response = null;
try {
response = httpClient.execute(httpRequest);
if (response.getStatusLine().getStatusCode() == StatusCode.SC_UNAUTHORIZED
.getScCode()) {
Header wwwheader = response
.getLastHeader("WWW-Authenticate");//用户身份认证
if (wwwheader != null) {
Header authResponse = null;
if (wwwheader.getValue().contains("Digest")) {
DigestScheme digestScheme = new DigestScheme();
digestScheme.processChallenge(wwwheader);
authResponse = digestScheme.authenticate(cred,
httpRequest);
httpRequest.addHeader(authResponse);
} else if (wwwheader.getValue().contains("Basic")) {
BasicScheme basicScheme = new BasicScheme();
authResponse = basicScheme.authenticate(cred,
httpRequest);
httpRequest.addHeader(authResponse);
}
}
response = httpClient.execute(httpRequest);
}
} catch ( e) {
throw
}
return response;
}