HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。本文首先介绍 HTTPClient,然后根据作者实际工作经验给出了一些常见问题的解决方法。HttpClient简介HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 JAVA 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient,更多使用 HttpClient 的应用可以参见http: // wiki.apache.org/jakarta-httpclient/HttpClientPowered。 HttpClient 项目非常活跃,使用的人还是非常多的。目前 HttpClient 版本是在 2005.10.11 发布的 3.0 RC4 。 HttpClient 功能介绍以下列出的是 HttpClient 提供的主要的功能,要知道更多详细的功能可以参见 HttpClient 的主页。 * 实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等) * 支持自动转向 * 支持 HTTPS 协议 * 支持代理服务器等下面将逐一介绍怎样使用这些功能。首先,我们必须安装好 HttpClient。 * HttpClient 可以在http: // jakarta.apache.org/commons/httpclient/downloads.html下载 * HttpClient 用到了 Apache Jakarta common 下的子项目 logging,你可以从这个地址http: // jakarta.apache.org/site/downloads/downloads_commons-logging.cgi下载到 common logging,从下载后的压缩包中取出 commons-logging.jar 加到 CLASSPATH 中 * HttpClient 用到了 Apache Jakarta common 下的子项目 codec,你可以从这个地址http: // jakarta.apache.org/site/downloads/downloads_commons -codec.cgi 下载到最新的 common codec,从下载后的压缩包中取出 commons-codec-1.x.jar 加到 CLASSPATH 中. // 在jsp中模拟浏览器 // client.jsp <% @ page contentType = " text/vnd.wap.wml;charset=UTF-8 " import = " java.util.*,java.io.*,java.net.*,org.apache.commons.httpclient.*,org.apache.commons.httpclient.methods.*,org.apache.commons.logging.* " %> <% try ... {HttpClient client = new HttpClient();// 创建一个HttpMethod的实例PostMethod post = new PostMethod("http://localhost:8080/linktone.jsp?UA=jjjjjjjjjj");//设置参数NameValuePair[] data =...{ new NameValuePair("username","testuser"), new NameValuePair("password","123456"), new NameValuePair("key","123456c")};//post.setRequestBody(data);post.setRequestHeader("Content-type", "text/html; charset=gb2312");post.setRequestHeader("x-up-calling-line-id", "6666662222222222222");post.setRequestHeader("cp", "helloxxx_0000000000000");client.setConnectionTimeout(10000);int statusCode = client.executeMethod(post);if (statusCode == HttpStatus.SC_OK) ...{byte[] responseBody = post.getResponseBody();out.println(new String(responseBody));} Header locationHeader = post.getResponseHeader("location"); String location = null; post.releaseConnection();} catch (Exception e) ... {System.out.println(""+e.toString());} %>