使用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. The Air Jordan 11 Gym Red will be available December 9

    A few years ago Carmelo Anthony set the internet on fire when he was spotted rocking a never before ...

  2. DataTable转换成IList 【转载】

    链接:http://www.cnblogs.com/hlxs/archive/2011/05/09/2087976.html#2738813 留着学习 using System; using Syst ...

  3. 关闭Oracle 11g的DPR特性

    关闭Oracle 11g的DPR(Direct Path Read)特性 查看event参数值: SQL> show parameter event NAME TYPE VALUE ------ ...

  4. mysql服务器上的mysql这个实例中表的介绍

    1.user表. 分个分隔符

  5. 用python实现websocket请求遇到的问题及解决方法。

    想要实现python的ws库功能,实时获取对方服务器ws协议返回的数据,查了下百度,用如下流程: ws = create_connection("wss://ws.xxxxxxx.info/ ...

  6. python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法

    python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...

  7. 学写网页 #04# w3school

    索引: HTML 输入类型 XHTML HTML5 HTML5 样式指南和代码约定 WHO 成立于 1948 年. 对缩写进行标记能够为浏览器.翻译系统以及搜索引擎提供有用的信息. code 元素不保 ...

  8. Notes of Head.First.HTML.and.CSS.2nd.Edition

    What does the web server do? tirelessly waiting for requests from webbrowsers What does the web brow ...

  9. SNMP学习笔记之Centos7配置SNMP服务

    0x00 安装yum源安装SNMP软件包 1.yum源安装SNMP服务: yum -y install net-snmp net-snmp-utils 2.查看SNMP版本号: snmpd -v 0x ...

  10. 20145317《网络对抗》shellcode注入&Return-to-libc攻击深入

    20145317<网络对抗>shellcode注入&Return-to-libc攻击深入 学习任务 shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻 ...