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
- 浏览 1528
- 评论(0)
- 论坛回复 / 浏览 (0 / 4746)
- 查看更多
相关推荐
压缩包中含有多个文档,从了解httpclient到应用。 httpClient 1httpClint 1.1简介 HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持...
httpClient组件使用说明,搭建,所需jar包,简单应用,例子。适用于初级学员
commons-httpclient-3.1.jar的演示工程 好好的httpclient升级到4.1以后被改得面目全非,没有了过去的那种优雅,很怀念过去用他做的一个东西,所以找到3.1做了简单的应用演示。
android 网络开发中涉及到httpclient的简单应用
@angular/common/http 中的 HttpClient 类为 Angular 应用程序提供了一个简化的 API 来实现 HTTP 客户端功能。 一、准备工作 首先在app.module.ts 导入 HttpClientModule。如下: import { HttpClientModule } from...
jersery RestFull web service工程 应用了httpClient demo以及日志操作源码和java 动态反射机制 整个工程用来对外提供一个简化的ceph云存储服务器的restful api 同时工程作为 学习jersery 以及简单的统一日志管理 ...
在Java开发中,HttpClient的应用非常广泛。用的多了,自然会想去把他封装一下,写一个自己的小类库,方便自己日常学习工作使用。于是,就结合工作情况,利用业余时间简单的对HC进行了一下封装,最终的结果就是发起...
json接口的简单实例,可以直接运行看到效果。通过des加密解密进行服务器客户端的json接口通讯。应用httpclient组件...
Aspnet-marco-httpclient-factory.zip,用于applicationmarco httpclient工厂的httpclient工厂,asp.net是一个开源的web框架,用于使用.net构建现代web应用和服务。asp.net创建基于html5、css和javascript的网站,这些...
使用PoolingHttpClientConnectionManager您可能会遇到将连接返回到池的情况,但是一段时间后服务器将关闭与您的应用程序的连接。 因此,您将使那些CLOSE_WAIT连接处于挂起状态并声称已关闭。 要说明此行为,请查看...
本例子是一个使用HttpClient和URLConnection获取网页html内容的小例子,获取到的源码不解析直接显示,技术比较简单,需要的朋友可以下载研究一下,项目编码GBK默认编译版本2.3.3
使用HttpClient获取网页html源代码获取到的源码不解析直接显示,技术比较简单,需要的朋友可以下载研究一下,项目编码GBK默认编译版本2.3.3。
这一篇我们来介绍一下使用HttpClient的方式来对Web API进行数据操作。 这里我们还是继续使用对Product的操作实例来演示一下它的基本应用。 创建ASP.NET Web API应用程序 在VS中选择创建一个ASP.NET Web ...
用脚也能想得出来:Google、baidu、淘宝、亚马逊、twitter等IT巨头 背后的巨型计算平台都是分布式系统了,甚至就连一个简单的微信公众号应用的后端也都分布式了,即便仅有几台机器而已。分布式让系统富有弹性,面 对...
用于PSR-7的HttpClient中间件 使用PSR-7消息的HTTP客户端中间件缺少接口。 目的是提供您可以在应用程序和非http库中依赖的接口。 这样,我们可以实现独立的代码,每个人都可以使用他想要的任何HTTP客户端。 可能有...
9.3.1 HttpClient API介绍 373 9.3.2 GET方法的使用和限制 378 9.3.3 使用POST方法上传附件 382 9.3.4 从服务器端下载图片 390 9.4 设计C/S通信数据格式 392 9.4.1 对象序列化 396 9.4.2 使用XML传输对象 401 9.5 小...
再比如Universal-Image-Loader,它使得在界面上显示网络图片的操作变得极度简单,开发者不用关心如何从网络上获取图片,也不用关心开启线程、回收图片资源等细节,Universal-Image-Loader已经把一切都做好了。...
采用Forest、Okhttp、HttpClient三种方式调用高德地图第三方API,简单易用
Rinvex Authy Rinvex Authy是 ... 正版应用创建一个新的 Authy 应用实例并与之交互: $ authyApp = new \ Rinvex \ Authy \ App ( $ httpClient , $ apiKey );$ appStats = $ authyApp -> stats (); // Get app stats
Android项目源码纯手工仿华为商城应用源码是一个简单仿华为商城的项目,没有用任何第三方类库,HttpClient,数据库存储,内部缓存和外部缓存都是作者独立写的,目前项目处于一个打开就崩的状态,不知道是不是我的...