`
frank-liu
  • 浏览: 1682543 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java HttpClient学习总结:基本http操作

阅读更多

简介

     最近在做一些开放接口应用的时候发现原有的一些应用大量使用了HttpComponent里面的功能。从HttpComponent本身的介绍来说,它是一个实现Http协议很多操作功能的组件,在一些爬虫和网络应用开发中都得到大量的应用。因为牵涉到的开放服务接口使用的是http rest服务,感觉httpcomponent很适合其中的场景。这里结合项目中使用的一些场景来对其中的功能做一个简单的总结。

HttpClient基本操作

     在使用httpclient之前我们需要首先下载httpclient的jar包,里面就包含了httpclient.jar, httpcore.jar等几个文件。我们先看一个简单的示例:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;


public class HTTPGetSample {
    public static void main(String[] args) throws ClientProtocolException, IOException {
        String url = "http://www.google.com.hk/search?q=httpClient";
		
        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(url);
		
        HttpResponse response = client.execute(request);
        System.out.println("Response Code: " +
	    response.getStatusLine().getStatusCode());
		
        BufferedReader rd = new BufferedReader(
            new InputStreamReader(response.getEntity().getContent()));
        String line = "";
        while((line = rd.readLine()) != null) {
	    System.out.println(line);
        }
    }
}

     在这个示例里我们尝试用httpclient发送一个http get请求。请求的地址是对应到一个google search的url.仔细看上面的代码,其实还是很简单,首先创建一个HttpClient的对象,然后针对我们的http get操作创建一个HttpGet对象,并将请求url作为参数传给该对象。具体执行get操作的步骤是通过httpclient.execute()方法。这个方法里将HttpGet对象作为参数传入。返回一个HttpResponse的结果。

    我们通过读取HttpResponse的结果就可以得到请求返回的详细信息。这个过程和我们通过浏览器浏览某个网页的效果相同。程序执行的部分结果如下:

Response Code: 200
<!doctype html><html itemscope="itemscope" itemtype="http://schema.org/WebPage"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">...

    由于篇幅限制,省略了部分结果。

    从前面示例里我们可以看到通过HttpClient发送Http请求的基本套路:

1. 创建HttpClient对象。

2. 构造Http 请求对象。

3. 执行HttpClient对象的execute方法,将Http请求对象作为该方法的参数。

4. 读取execute方法返回的HttpResponse结果并解析。

    ok,既然整体过程是这样的话,我们后续使用post, put, delete等操作的过程也就大同小异了。在详细讨论这些方法使用之前我们先简单的讨论一下http协议里的这几种方法。

Http协议常用方法

     关于http协议的介绍网上材料很多。总的来说,http协议规范了通信双方交互的方式,基本上它是采用一种请求-应答的方式。客户端发送请求给服务器端,然后服务器端发送响应回来。我们常用的几种http操作的方法可以分为可修改的和不可修改的。怎么理解这个可修改和不可修改的意思呢?

    在http协议里,我们有的请求方法只是获取服务器端资源的信息,默认的假定是不修改服务器端的状态,这种方法称为不可修改的方法。比如说HttpGet, HttpHead, HttpOptions,HttpTrace。所以说这种请求方法是可以重复执行并返回相同结果的。我们对同一个资源执行若干次get操作,每次得到的结果都相同。而对于可修改的请求来说,主要有HttpPut, HttpPost, HttpDelete等。他们在规范里分别对应着对资源的update, create和delete等操作。所以在一些web应用里,我们提交表单的时候选择的是http post操作。

     除了http协议里规定的这么几种方法,它本身还支持交互的内容,比如通过请求头中间设定"accept", "Content-Type"等信息,指定我们交互的内容格式。他们可以是静态文件类型的,比如说txt, .gif,.jpg等,也可以是一些其他文本如json, xml。在一些rest web服务里面,我们指定的支持json或者xml格式的数据交换就可以通过这里来定义。

     我们刚看到了通过设定请求头来指定通信的交互内容格式,那么是否也可以指定请求体呢?在这里是有可能的,只是针对不同的请求方法。比如说对HttpGet之类的方法,他们本身只是获取服务器的内容不需要向服务器提交额外的信息,所以对于这一类的请求方法来说带个请求体意义并不大。而对于那些要提交大量内容给服务器的请求如上传文件或者提交表单信息的httpput, httppost请求,他们就有必要设置一个请求体。

    有了前面的这些铺垫,我们后面可以更加深入的分析一下httpclient中间几种方法的结构和用法。

 Http操作方法结构

    HttpClient相关的uml结构图如下:

 

    我们关注的各种http方法都被定义成一个个独立的类,他们都继承自HttpRequestBase。其中比较特殊一点的是HttpPut, HttpPost,他们继承自HttpEntityEnclosingRequestBase。为什么这两个类要稍微特殊一点呢?这就是我们前面提到的他们要设置请求体,在HttpEntityEnclosingRequestBase里有HttpEntity的成员变量,他们作为这两个方法特定的特性定义在这里:

private HttpEntity entity;

public HttpEntity getEntity() {
    return this.entity;
}

public void setEntity(final HttpEntity entity) {
    this.entity = entity;
}

     HttpEntity是一个接口,根据具体传入的参数类型我们可以选择StringEntity, InputStreamEntity等。由此,对于这两种有差别的请求方法来说,他们只是需要多增加一个setEntity的方法。

    另外对于通用的设置请求头部分,前面的示例代码里我们是使用了一种硬编码的方式。我们也可以采用request.addHeader(Header)的方法。在HttpClient里,Header是一个接口,我们可以创建两种实现该接口的对象来作为参数传给addHeader方法。分别是BasicHeader, BufferedHeader。

 

总结

     HttpClient通常用来作为一个模拟http请求的工具。我们最常见的get, put, post, delete等方法在其中都通过具体定义的类来实现。当我们要发送某个具体的请求是,只需要创建对应请求的对象并设定请求头或者请求体,执行HttpClient的execute方法就可以得到执行结果了。返回的HttpResponse消息体结果具体内容是一个InputStream,我们可以根据需要来读取内容。返回的消息头则是显示http操作方法的执行结果,我们可以根据消息头来判断请求执行是否正确,结果是否执行完毕以及如果出错了错误的缘由可能是什么等信息。关于HttpClient的更多实现和应用后面会进一步学习研究。

参考材料

HttpComponent website

  • 大小: 51.6 KB
  • 大小: 9 KB
分享到:
评论
1 楼 frank-liu 2014-05-05  
yaerfeng1989 写道
可以参考代码:java apache commons HttpClient发送get和post请求的学习整理,下载地址:http://www.zuidaima.com/share/1754065983409152.htm

他这边贴出来的代码有点老了,新的httpcomponent的api有不少更新,不过整体的思路都差不多。

相关推荐

    commons-httpclient-3.0.jar JAVA中使用HttpClient可以用到

    总结,`commons-httpclient-3.0.jar`在JAVA中的应用,不仅提供了一种简单易用的HTTP客户端实现,还具有丰富的特性和扩展性,对于理解和实现网络通信具有重要的学习价值。然而,随着技术的进步,开发者应关注并适时...

    HttpClient学习总结.docx

    HttpClient是Apache开源组织提供的一个Java库,专门用来处理HTTP请求和响应。它提供了丰富的功能,使得在Java应用程序中实现HTTP通信变得简单而高效。HttpClient支持多种HTTP方法,如GET、POST、PUT、HEAD等,还支持...

    最全最新httpclient4.3.3

    总结,Apache HttpClient 4.3.3是Java开发者进行HTTP通信的强大工具。通过深入理解和应用,我们可以构建高效、可靠的网络应用程序,并在抓包、API调用等场景中游刃有余。了解和掌握HttpClient,无疑是提升Java网络...

    httpClient组件使用说明

    总结,HttpClient是Java中执行HTTP请求的强大工具,通过它,你可以轻松地进行GET、POST等HTTP操作,自定义请求头,处理响应数据。对于初级学员来说,理解并熟练运用HttpClient是掌握网络通信的关键步骤之一。在实际...

    HttpClient入门

    总结,HttpClient是Java开发中的得力助手,无论你是新手还是经验丰富的开发者,理解并熟练运用HttpClient都能提升你的网络编程能力。通过不断的实践和学习,你会发现HttpClient功能强大且灵活,能满足各种复杂的HTTP...

    HttpClient学习笔记

    HttpClient是Apache开源...总结,HttpClient是Java开发中处理HTTP通信的重要工具,其强大的功能和灵活的配置使其成为开发者的首选。通过深入学习和实践,开发者可以更好地掌握HttpClient,提升项目中的网络通信能力。

    HttpClient实现POST GET和文件下载

    HttpClient是Apache基金会开发的一个HTTP客户端库,广泛应用于Java编程中,用于执行HTTP请求,包括GET、POST以及文件下载等操作。本篇文章将深入探讨如何利用HttpClient实现这些功能,并提供实战代码示例。 首先,...

    httpClient-4.5.jar及源码

    - **多路复用**:HTTP/2协议允许在一个TCP连接上同时处理多个请求,HttpClient 4.5支持这一特性,可以提高并发性能。 - **连接池管理**:HttpClient提供了`PoolingHttpClientConnectionManager`,可以有效地管理和...

    HttpClient4.5全部jar包+简单实例

    HttpClient是Apache基金会开发的一个Java库,用于执行HTTP...这个压缩包为你提供了一个快速上手的起点,通过学习`PTXCheckTools.java`和`使用说明.txt`,你可以掌握HttpClient的基本用法,并将其应用到自己的项目中。

    Httpclient教程

    通过本教程的学习,相信您已经掌握了如何使用`Httpclient`来发送HTTP请求、处理响应的基本方法,以及一些高级用法。`Httpclient`不仅功能强大,而且易于使用,是Java开发中处理HTTP通信的首选工具之一。希望本教程对...

    HttpClient入门陆小马功钟浩.pdf

    以上知识点为HttpClient入门的基础内容,对于想要学习如何在Java中进行HTTP网络编程的人来说是必须掌握的基本技能。随着技术的发展,虽然4.0.1版可能不是现在最新的版本,但其核心的使用方法和API设计思路仍然具有...

    httpClient4.1入门教程

    总结,HttpClient4.1是一个强大且功能丰富的HTTP客户端库,适用于各种HTTP操作,包括基本的GET/POST请求,到复杂的表单提交、SSL连接等。理解并熟练使用HttpClient,将极大地提升你在处理网络通信时的效率和能力。

    android HttpClient 上传图片

    在Android开发中,使用`HttpClient`进行图片上传是一项常见的需求,尤其在实现用户头像上传、照片分享等功能时。...但无论如何,掌握基本的`HttpClient`使用方法仍然是理解和学习其他网络库的基础。

    java讲义与总结大全(word版)

    这份"java讲义与总结大全(word版)"包含了深入学习Java编程所需的关键知识点,适合初学者和进阶者使用。它按照章节进行组织,方便读者逐步掌握Java的核心概念和技术。 1. **基础语法**: - 变量与数据类型:Java...

    JAVA开发一个简单的爬虫的思路1

    在JAVA开发一个简单的爬虫的...总结来说,开发Java爬虫需要掌握HTTP协议、HttpClient库的使用、HTML解析(如Jsoup)以及基本的异常处理和资源管理技巧。通过实践和理解这些知识点,你将能够构建出自己的Java爬虫程序。

    Java Http通信测试代码

    在HTTP通信中,通常涉及以下几种基本操作: 1. **GET请求**:获取服务器上的资源,如网页内容。Java中可以通过`java.net.URL`和`java.net.URLConnection`类来实现GET请求。 2. **POST请求**:向服务器发送数据,常...

    HttpClient4.3教程.PDF

    通过本教程的学习,我们了解了Apache HttpClient的基本概念及其在Java开发中的应用价值。它不仅为开发者提供了丰富的API来处理HTTP通信,而且具有良好的性能表现和广泛的适用性。无论是构建Web应用还是实现复杂的...

    使用JAVA原生实现简单的HTTP请求

    虽然题目中的文件列表中提到了`HttpClient`,但这里讨论的是Java原生实现,如果需要使用Apache HttpClient,需要额外引入对应的依赖库,并学习其API用法。 总结,Java原生的`HttpURLConnection`虽然简单易用,但在...

    pai.rar_F79_java编程

    描述提到这是一份作者个人的Java API学习总结,愿意与网络上的朋友们共享,显示出这是一份个人经验的汇集,可能包含了作者在Java编程学习过程中的心得和实用代码示例。 标签“f79”和“java编程”进一步确认了这是...

    一份超级详细的Java面试题【大厂面试真题+Java学习指南+工作总结】

    - 文件操作:File类的基本操作,如创建、删除、重命名等。 - 缓冲流:BufferedReader、BufferedWriter等提高读写效率。 - 对象序列化:实现Serializable接口进行对象持久化。 7. **反射** - 获取类信息:Class...

Global site tag (gtag.js) - Google Analytics