HttpCient简单应用
综述
此指南的设计用来来提供一个怎么样去使用HttpClient的基本概况。如果完成此指南的阅读应该能够使用下载页面的HttpClient开发一个简单的应用了。
准备
第一件事情是你需要有一个HttpClient以及其附件。此指南适用于HttpClient3.0。所以你必须要有JDK1.3或是更高版本的JDK。
下载HttpClient及其附件并把他们设置到你的CLASSPATH环境里。
概念
一般使用HttpClient包含以下几个步骤:
· 创建一个HttpClient实例
· 创建一个方法的实例(比如GetMethod),在方法的构造方法里可以传入你要去连接的URL。
· 告诉HttpClient去执行方法。
· 读取返回的Response。
· 释放连接。
· 处理Response。
下面我将会解释如何去执行每一步。需要注意的是我们这里假定服务器总是放回正确的结果。这一点很重要,因为HTTP 1.1 允许重复的请求去使用相同的连接,只需要简单的一个接一个的发送请求。显然,如果我们不去读取第一次请求的Response,它的数据在第二次处理请求的时候被读出来。HttpClient提供了此解决方案,为了避免这个问题,释放连接就显的相当重要了。一但释放HttpClient,connection也将是可重用的。
实例化HttpClient
这里无参构造方法为大多数的情况提供了一个默认的、良好的配置。
HttpCient client = new HttpClient();
创建一个方法
在HttpClient里,符合HTTP协议的各种Methods相对应的class类都实现了HttpMethod这个接口,这些类都放到了org..apache.commons.httpclient.methods这个包下面。
下面这段代码通过Get方法简单的通过URL得到该URL指向的文件。
HttpMethod method = new GetMethod(”Http://www.apache.org/”);
执行方法
调用client.executeMethod(method)就可以执行方法,网络不稳定的情况下,我们也要对错误进行处理。executeMethod可能抛出HttpException和IOException异常。
另外一些有用的信息就是从服务器返回的状态码。状态码在执行executeMethod方法时以int基本类型返回,通过状态码我们可以判断请求是否成功,或是需要client进一步进行处理,像身份验证。
HttpException和IOException
一个HttpException对应一个逻辑错误,当Request不能够被发送或是Response不能够按照HTTP协议来解析的时候抛出,通常这种错误不能够恢复。这里是对HttpClient 的异常处理的详细讨论。请注意,HttpException继承了IOException,若你的应用不需要区分协议和传输错误时,你可以忽略HttpException或是简单的捕获IOException。
Method的自恢复
每个默认的HttpClient都会自动尝试从不是致命的错误中恢复,当一个建档IOException抛出时,HttpClient重复3次直到将Requset的全部内容发送到目标服务器。你可以通过以下代码来设置恢复机制。
Client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
你也可以自己定制恢复机制,重复的次数也可以替换。
读取Response
通常在忽略服务器返回的状态码的情况下,读取Response body,这一点很重要。有三种方法可以做到:
· 调用method.getResponseBody()。可返回被包含在Resonse body中的byte数据。
· 调用method.getResposneBodyAsString()。此方法将返回包含在Response body中的String,这里需要注意的是bytes专程String是使用的默认编码,所以此方法并能够在所以的平台上正确执行。
· 调用method.getResponseBodyAsStream()。当再次调用stream.close()时会返回包含完整内容的流。此方法适用于对接受大量数据,可将数据缓存到一个文件中或是处理。
释放连接
这是关键的一个步骤。我们必须告诉HttpClient我们已经做完所有的工作,这样HttpClient才可以被重用,如果不释放连接HttpClient会无限期的等待直接关闭连接。
Method.releaseConnection()。
处理Response
这里我只是简单的把Response中的内容打印处理
System.out.println(new String(responseBody));
处理Resposne时候可以根据你的具体应用来做相应的处理。
最后是源代码
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.params.HttpMethodParams;
import java.io.*;
public class HttpClientTutorial {
private static String url = "http://www.apache.org/";
public static void main(String[] args) {
// Create an instance of HttpClient.
HttpClient client = new HttpClient();
// Create a method instance.
GetMethod method = new GetMethod(url);
// Provide custom retry handler is necessary
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler(3, false));
try {
// Execute the method.
int statusCode = client.executeMethod(method);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: " + method.getStatusLine());
}
// Read the response body.
byte[] responseBody = method.getResponseBody();
// Deal with the response.
// Use caution: ensure correct character encoding and is not binary data
System.out.println(new String(responseBody));
} catch (HttpException e) {
System.err.println("Fatal protocol violation: " + e.getMessage());
e.printStackTrace();
} catch (IOException e) {
System.err.println("Fatal transport error: " + e.getMessage());
e.printStackTrace();
} finally {
// Release the connection.
method.releaseConnection();
}
}
}
分享到:
- 2009-04-09 09:35
- 浏览 1554
- 评论(0)
- 论坛回复 / 浏览 (0 / 4761)
- 查看更多
相关推荐
在本文中,我们将深入探讨`HttpClient`的实例应用,以及如何使用它来实现各种HTTP操作。 ### 1. `HttpClient`的基本用法 创建`HttpClient`实例通常是通过静态`HttpClientFactory`方法或直接实例化`HttpClient`完成...
本教程将基于标题"HTTPClient简单使用"和提供的文件`HttpService`、`HttpClient`来阐述HTTPClient的基本使用方法。 1. **HTTPClient简介** HTTPClient是Apache的 HttpClient库,它为Java开发者提供了全面的HTTP...
1. **异步和同步API**: HttpClient 提供了同步和异步两种API,以适应不同的应用场景。同步API适合于简单且线性的工作流,而异步API则适用于处理大量并发请求,提高了系统性能。 2. **全面的HTTP协议支持**: ...
总的来说,HttpClient为Java开发者提供了一个强大且灵活的工具,使得发送HTTP请求变得简单。虽然其3.0版本有一些已知的问题和限制,但理解它的基本用法对学习更现代的版本仍然很有帮助。如果你正在处理需要大量HTTP...
《HttpClient 4.2.1:Java开发中的HTTP通信利器》 在Java开发领域,HttpClient是一个广泛使用的库,...无论是简单的GET请求还是复杂的POST操作,HttpClient都能游刃有余,为Java应用程序的网络通信带来极大的便利。
这不仅仅是一个简单的升级过程,而是涉及到对API的变化、编程模型的更新以及对网络编程的更深层次理解。 在进行迁移之前,首先需要了解HttpClient 3.x和HttpComponents HttpClient 4.x之间的主要区别。HttpClient 3...
这个压缩包包含了HttpClient 4.5所需的全部jar包,以及一个简单的实例`PTXCheckTools.java`,方便用户快速理解和应用。 HttpClient库的核心功能包括: 1. **HTTP协议支持**:HttpClient支持HTTP/1.1和HTTP/2协议,...
Java HttpClient 是一个强大的HTTP客户端库,它允许Java开发者在应用程序中发送HTTP请求并接收响应,广泛应用于Web服务的调用、API接口测试以及自动化脚本等场景。在Java项目中,使用HttpClient可以实现与Web服务器...
《HttpClient详解:构建高效可靠的...通过深入理解和熟练使用HttpClient,可以提升Java应用的网络通信能力,提高代码的可维护性和稳定性。在实际项目中,合理利用HttpClient的优势,可以有效提升程序的性能和用户体验。
HttpClient是Apache基金会开发的一个HTTP客户端库,广泛应用于Java开发者中,用于执行HTTP...对于RESTful API,使用HttpClient则更为简单,只需构造合适的URL和请求体,然后按照HTTP方法(如GET、POST)进行操作即可。
HttpClient是Apache基金会开发的一个HTTP客户端库,用于在Java应用程序中执行HTTP请求。它提供了丰富的API,使得开发者可以方便地实现HTTP GET、POST以及文件的上传和下载操作。在这个主题中,我们将深入理解...
HttpClient是Apache软件基金...HttpClient库广泛应用于Java开发,无论是简单的HTTP请求还是复杂的Web服务交互,都能提供强大的支持。在使用过程中,注意根据项目需求进行适当的配置和优化,以确保最佳的性能和可靠性。
HttpClient 4.3 是 Apache 开源组织提供的一个用于构建 HTTP 客户端应用程序的强大库,主要专注于 HTTP 协议的实现。它建立在 HttpCore 库之上,支持传统的阻塞 I/O 模型,适用于各种需要高效、可控的 HTTP 交互的...
三、简单应用 HttpClient的核心类包括`CloseableHttpClient`和`HttpGet`,它们分别用于创建HTTP客户端和定义HTTP请求。以下是一个简单的GET请求示例: ```java import org.apache.http.HttpEntity; import org....
紧接着,文档提供了一个简单的例子来演示如何使用HttpClient进行基本的HTTP GET请求操作,该例子展示了如何用GET方法访问指定的URL并返回内容。接着,文档介绍了如何在HttpClient中传递参数,这部分内容会讲解通过...
压缩包中含有多个文档,从了解httpclient到应用。 httpClient 1httpClint 1.1简介 HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持...
《HttpClient 4.0:Java中的HTTP客户端库详解》 HttpClient是Apache软件基金会下的一个开源项目,主要用于处理HTTP协议的客户端编程...了解并熟练掌握HttpClient的使用,对于提升Java应用的网络通信效率具有重要意义。
HttpClient是Apache基金会开发的一个开源HTTP客户端库,广泛应用于Java编程领域,用于执行HTTP请求和处理响应。标题“httpclient所需lib”表明我们关注的是HttpClient库及其相关的依赖库。在本篇文章中,我们将深入...
HttpClient库支持各种HTTP协议特性,如GET、POST方法、Cookie管理、重定向处理、身份验证等,使得在Java应用中实现Web服务调用变得简单易行。 HttpClient的核心功能包括: 1. **HTTP方法支持**:HttpClient提供了...