使用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. 我们都知道响应对象也是由状态行(协议,状态码,状态描述),消息头,响应实体三部分组成。现在有了响应对象就可以获取响应对象中的消息。
具体方法见上。
- yii2 httpClient的用法
yii2 httpClient的用法示例: <?php /* * @Purpose : yii2 httpClient 请求示例 * @Author : Chrdai * @Time : 201 ...
- HttpClient基本用法
<Apache HttpClient 4.3开发指南> Apache HttpClient 4系列已经发布很久了,但由于它与HttpClient 3.x版本完全不兼容,以至于业内采用此库的 ...
- HttpClient的用法
客户端模拟http请求工具 Postmen(谷歌插件).RestClient 服务器模拟http请求工具 httpclient.HttpURLConnection httpCient请求代码 /** ...
- HttpClient基础用法
一.HttpClient HttpClient是Apache HttpComponents 下的子项目,用来提供高效的.最新的.功能丰富的支持HTTP协议的客户端编程工具包(httpclient-4. ...
- Java测试开发--HttpClient常规用法(九)
1.HttpClient可以读取网页(HTTP/HTTPS)内容 2.对url发送get/post请求(带不带参数都可以),进行测试 一.maven项目pom.xml需要引入包 <depende ...
- Android Volley完全解析(一),初识Volley的基本用法
1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android 系统中主要提供了两种方式来进行 ...
- HttpClient session
session概述 session机制 session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息. 当程序需要为某个客户端的请求创建一个session ...
- [转] Android Volley完全解析(一),初识Volley的基本用法
版权声明:本文出自郭霖的博客,转载必须注明出处. 目录(?)[-] Volley简介 下载Volley StringRequest的用法 JsonRequest的用法 转载请注明出处:http ...
- Android Volley入门到精通:初识Volley的基本用法
1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...
随机推荐
- TraceSource记录程序日志
1.配置文件 <system.diagnostics> <sources> <source name="TraceError" switchValue ...
- hive 配置参数说明(收藏版)
问题导读: 如何设置reduce的个数? Hive 默认的数据文件存储路径? Hive 默认的输出文件格式? 是否开启 map/reduce job的并发提交? 所允许的最大的动态分区的个数? hiv ...
- sql server数据库备份单个表的结构和数据生成脚本
1.使用场景:sql server数据库备份单个表的结构和数据,在我们要修改正式系统的数据的一天或者多条某些数据时候,要执行update语句操作,安全稳健考虑,最好先做好所修改的表的结构和数据备份! ...
- java.lang.NoClassDefFoundError: org/apache/http/client/config/RequestConfig
java 错误.java.lang.NoClassDefFoundError: org/apache/http/client/config/RequestConfig 本质上是httpClient的j ...
- (三)github之GIT的导入
什么是版本管理? git是一款[分散型版本管理]软件,提供了开发过程中不可少的功能,例如记录一款软件添加或者更改源代码的过程,回溯到特定阶段,恢复误删除的文件等. 集中型:将仓库集中放在服务器中,一旦 ...
- Jsp获取Java的对象(JavaBean)
Jsp获取Java的对象(JavaBean) Java代码片段: AuthReqBean authRep=new AuthReqBean(); authRep.setUserCode(usercode ...
- 01: 安装zabbix server
目录:Django其他篇 01: 安装zabbix server 02:zabbix-agent安装配置 及 web界面管理 03: zabbix API接口 对 主机.主机组.模板.应用集.监控项. ...
- 使用liner、feather、multiband对已经拼接的数据进行融合
所谓"blend",英文解释为“vt. 混合vi. 混合:协调n. 混合:掺合物”这里应该理解为是图像数据的融合.这是“识别->对准->融合”的最后一步.融合是决定拼接 ...
- 2018-2019-1 20189218《Linux内核原理与分析》第七周作业
task_struck数据结构 在Linux内核中,通过task_struct这个结构体对进程进行管理,我们可以叫他PCB或者进程描述符.这个结构体定义在include/linux/sched.h中. ...
- C++11 正则表达式——实例系统(转载)
一.用正则表达式判断邮箱格式是否正确 1 #include <regex> #include <iostream> #include <string> bool i ...