使用HttpClient连接服务端的步骤:

1.创建HttpClient客户端对象
HttpClient client = new DefaultHttpClient();
2.创建请求对象
         1.1 GET请求
HttpUriRequest request = new HttpGet(String uri)
                   HttpUriRequest request = new HttpGet(URI uri)
         1.2 POST请求
                   1.2.1  创建Post方法的请求对象
                   HttpUriRequest request = new HttpPost()
                   HttpUriRequest request = new HttpPost(String uri)
                   HttpUriRequest request = new HttpPost(URI uri)
                   1.2.2  创建请求参数的List集合
                   List<NameValuePair> pairs = new ArrayList<NameValuePair>();
                   pairs.add(new BasicNameValuePair(“name” , “value”));
                   ...
                   1.2.3  使用请求参数List集合创建并设置请求实体
                   UrlEncodedFormEntity requestEntity = new UrlEncodedFormEntity(pairs);
                   (HttpPost)request.setEntity(requsetEntity);  //setEntity是HttpPost特有的方法
3.客户端执行响应
         HttpResponse response = client.execute(request);
4.获取并判断响应码,获取响应实体对象
         if(response.getStatusLine().getStatusCode == HttpStatus.SC_OK){
                  HttpEntity responseEntity = response.getEntity();
         }
5.解析响应实体对象
         InputStream is = entity.getContent();     //获取内容读取流
         EntityUtils.toByteArray(entity);                //转换成字节数组
         EntityUtils.toString(entity);                        //转换成字符串
         EntityUtils.toString(entity,"utf-8");                   //使用相应编码转换成字符串

开发中的模式

public class HttpUtils{
         
         //设置请求类型常量
         public static final int METHOD_GET = 1;
         public static final int METHOD _POST = 2;
         /*
          *创建方法获取响应实体
          *需要知道的参数有三个
          *URI 带有文件名称的整个网络地址
          *List<NameValuePair> 带有参数的键值对
,代表GET方法;如果是2,代表POST方法
         */
         public HttpEntity getEntity(String uri , List<NameValuePair> params , int method)
throws Exception{
         //创建HttpEntity的引用
         HttpEntity responseEntity = null;
         //创建客户端对象
         HttpClient client = new DefaultHttpClient();
         //创建请求对象
         HttpUriRquest request = null;
         //判断方法时GET还是POST,并且创建请求对象
         switch(method){
         case 1:
                   StringBuilder sb = new StringBuilder(uri);
                   //循环加入请求参数
                   if(params != null && !params.isEmpty()){
         sb.append(“?”);
         for(NameValuePair pair : pairs){
                   sb.append(pair.getName());
                   sb.append(“=”);
                   sb.append(pair.getValue());
                   sb.append(“&”);
}
sb.deleteCharAt(sb.lenght()-1);
}
request = new HttpGet(sb.toString());
break;
                   case 2:
                            request = HttpPost(uri);
                            if(params != null && !params.isEmpty()){
                                     //创建请求实体
                                     UrlEncodedFormEntity requestEntity = new UtlEncodedFormEntity(params);
                                     ((HttpPost)request).setEntity(requestEntity);
                            }
                            break;
}
//执行请求,获取相应对象
HttpResponse response = client.execute(request);
//获取响应实体
if(response.getStatusLine().getStatusCode() == 200){
responseEntity = response.getEntity();
}
return responseEntity;
}
}

HttpClient中常用到的类

HttpClient
         |-- DefaultHttpClient
                   构造方法:     DefaultHttpClient
                   主要方法:     HttpResponse  execute(HttpUriRequest request)
HttpUriRequest
         |-- HttpGet
                   构造方法:     HttpGet()
                                               HttpGet(String uri)
         |-- HttpPost
                   构造方法:     HttpPost(String uri)
                   主要方法:     void setEntity(HttpEntity entity)
HttpResponse
         主要方法:
                   StatusLine getStatusLine()
                   Header[] getAllHeaders();
                   HttpEntity getEntity();
HttpEntity
         主要方法:
                   InputStream getContent();
                   long getContentLength();
                   Header getContentType();
         |-- UrlEncodedFormEntity
                   构造方法:UrlEncodedFormEntity(List<? extends NameValuePair> params)
                                               //用于向请求对象中写入请求实体(包含请求参数(NameValuePair))
EntityUtils
         public static byte[] toByteArray(HttpEntity entity)
         public static String toString(HttpEntity entity)
         public static String toString(HttpEntity entity , String encoding)
StatusLine
         int getStatusCode()
HttpStatus
         SC_OK   SC_NOT_FOUND
Header
         String getName()
         String getValue()
NameValuePair
         String getName()
         String getValue()
         |-- BasicNameValuePair
                   构造方法:BasicNameValuePair(String name , String value)

快速记忆(POST)

1.       要想连接网络,肯定需要一个客户端对象,所以首先创建一个客户端对象HttpClient
2.       拥有客户端对象之后肯定需要对互联网进行访问,首先要对互联网进行请求,所以要创建一个请求对象HttpUriRequest,因为是Post请求,所以使用HttpPost
3.       我们知道请求对象包含请求行(方法、路径、协议),消息头,请求实体三部分。通过new HttpPost(uri)可以设置请求行的路径,现在需要设置请求实体中的请求参数。
我们知道请求参数一定是由请求参数的名称和请求参数的值组成。这时就需要一个类NameValuePair,这是一个键值对,在初始化的时候为了简便直接使用其子类BaseNameValuePair(String name , String value)。
如果有多组请求参数就要使用List集合List<NameValuePair>
4.       已经有一个存放参数的键值对的集合只有,就可以创建一个请求实体对象,并且将参数集合传进去—new UrlDecodedFormEntity(List<NameValuePair>)
5.       然后设置请求对象的请求实体
request.setEntity(new UrlDecodedFormEntity(List<NameValuePair>))
6.       现在不管是要访问的网络地址还是参数就都已经放入请求对象中了,现在就可以利用客户端进行请求—将请求对象发送出去,并且获得响应对象
响应对象 = 客户端对象.execute(请求对象)
7.       我们都知道响应对象也是由状态行(协议,状态码,状态描述),消息头,响应实体三部分组成。现在有了响应对象就可以获取响应对象中的消息。
具体方法见上。

HttpClient的用法总结的更多相关文章

  1. yii2 httpClient的用法

    yii2 httpClient的用法示例: <?php /* * @Purpose : yii2 httpClient 请求示例 * @Author : Chrdai * @Time : 201 ...

  2. HttpClient基本用法

    <Apache HttpClient 4.3开发指南> Apache HttpClient 4系列已经发布很久了,但由于它与HttpClient 3.x版本完全不兼容,以至于业内采用此库的 ...

  3. HttpClient的用法

    客户端模拟http请求工具 Postmen(谷歌插件).RestClient 服务器模拟http请求工具 httpclient.HttpURLConnection httpCient请求代码 /** ...

  4. HttpClient基础用法

    一.HttpClient HttpClient是Apache HttpComponents 下的子项目,用来提供高效的.最新的.功能丰富的支持HTTP协议的客户端编程工具包(httpclient-4. ...

  5. Java测试开发--HttpClient常规用法(九)

    1.HttpClient可以读取网页(HTTP/HTTPS)内容 2.对url发送get/post请求(带不带参数都可以),进行测试 一.maven项目pom.xml需要引入包 <depende ...

  6. Android Volley完全解析(一),初识Volley的基本用法

    1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android 系统中主要提供了两种方式来进行 ...

  7. HttpClient session

    session概述 session机制 session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息. 当程序需要为某个客户端的请求创建一个session ...

  8. [转] Android Volley完全解析(一),初识Volley的基本用法

    版权声明:本文出自郭霖的博客,转载必须注明出处.   目录(?)[-] Volley简介 下载Volley StringRequest的用法 JsonRequest的用法   转载请注明出处:http ...

  9. Android Volley入门到精通:初识Volley的基本用法

    1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...

随机推荐

  1. iOS UI基础-4.2应用程序管理 Xib文件使用

    Xib调整使用 1.新建xib文件 New File-->User Interface-->Empty 2.打开新建的xib文件,出现可视化窗口 (1)拖入一个UIView (不是UIVi ...

  2. 剑指offer3

    输入一个链表,从尾到头打印链表每个节点的值. 思路:首先借助一个栈,遍历链表中的每一个值,然后存储到栈中,利用栈的先进后出特点,然后添加到数组中返回. package demo3; import ja ...

  3. JSON草稿

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. 【Redis学习之二】Redis:redis.conf 配置详解

    参数说明redis.conf 配置项说明如下:1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程  daemonize no2. 当Redis以守护进程方式运行 ...

  5. 常用linux命令:locate 命令

    locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案.其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了.在一般的 di ...

  6. Linux基础命令---shutdown

    shutdown shutdown指令以安全的方式来关闭系统,所有已经登录的用户都会被告知系统将要关闭.并且在最后五分钟内,新的登录将被阻止.过了指定的time后,关机会向init(8)守护进程发送一 ...

  7. ES6学习笔记之map、set与数组、对象的对比

    ES6 ES5中的数据结构,主要是用Array和Object.在ES6中主要新增了Set和Map数据结构.到目前为止,常用的数据结构有四种Array.Object.Set.Map.下面话不多说了,来一 ...

  8. 关于QStandardItemModel

    类QabstractItemModel,QabstractListModel,QAbstractTableModel不保存数据,用户需要从这些类派生出子类,并在子类中定义某种数据结构来保存数据.与此不 ...

  9. mysql分类和事务回滚

    主要内容: ***数据定义语言DDL重点 ***数据操纵语言DML重点 数据查询语言DQL重点 ---事务控制语言TCL ---数据库控制语言DCL ---主键(primary key) ---数据冗 ...

  10. Mysql优化_内置profiling性能分析工具

    如果要进行SQL的调优优化和排查,第一步是先让故障重现,但是这个并不是这一分钟有问题,下一秒就OK.一般的企业一般是DBA数据库工程师从监控里找到问题.DBA会告诉我们让我们来排查问题,那么可能很多种 ...