HttpClient学习笔记
HttpClient相关的实体类官方文档地址:http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/
HttpGet HttpGet=new HttpGet(“http://www.baidu.com”);
httpClient.execute(httpGet);
HttpPost httpPost=new HttpPost(“http://www.baidu.com”);
List<NameValuePair>params=newArrayList<NameValuePair>();
Params.add(new BasicNameValuePair(“username”,”admin”));
Params.add(new BasicNameValuePair(“password”,”123456”));
UrlEncodedFormEntity entity=newUrlEncodedFormEntity(params,”utf-8”);
httpPost.setEntity(entity);
HttpClient.execute(HttpPost);
If(httpResponse.getStatusLine().getStatusCode()==200){
//请求和响应都成功了
HttpEntityentity=HttpResponse.getEntity();//调用getEntity()方法获取到一个HttpEntity实例
//用EntityUtils.toString()这个静态方法将HttpEntity转换成字符串,防止服务器返回的数据带有中文,所以在转换的时候将字符集指定成utf-8就可以了
Stringresponse=EntityUtils.toString(entity,”utf-8”);
}
6. 释放连接。无论执行方法是否成功,都必须释放连接。
GET请求示例代码:
public static String HttpGet(String url) {
// 关闭HttpClient系统日志;
System.setProperty("org.apache.commons.logging.Log","org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime","true");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient","stdout");
HttpClient httpClient = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
HttpResponse response = null;
HttpEntity httpEntity = null;
String content = null;
try {
response = httpClient.execute(get);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
//判断gzip,解压缩
if(!ObjectUtil.isEmpty(response.getLastHeader("Content-Encoding")) && (response.getLastHeader("Content-Encoding").toString()).indexOf("gzip")>=0){
response.setEntity(new GzipDecompressingEntity(response.getEntity()));
}
httpEntity = response.getEntity();
content = EntityUtils.toString(httpEntity);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != httpEntity) {
try {
httpEntity.consumeContent();//已经弃用
} catch (IOException e) {
e.printStackTrace();
}
}
}
return content;
}
POST请求示例代码:
/**
* @param url
* @param data (以流的方式发送请求参数)
* @return
*/
public static String HttpPost(String url, String data) {
// 关闭HttpClient系统日志;
System.setProperty("org.apache.commons.logging.Log","org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime","true");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient","stdout"); HttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
HttpResponse response = null;
HttpEntity httpEntity = null;
String content = null;
try {
StringEntity entity = new StringEntity(data,"UTF-8");
post.setEntity(entity);
response = httpClient.execute(post);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
httpEntity = response.getEntity();
content = EntityUtils.toString(httpEntity,"UTF-8");
}
} catch (Exception e) {
Logger.getRootLogger().error("HttpPost-流的方式:" + e.getMessage());
} finally {
if (null != httpEntity) {
try {
httpEntity.consumeContent();
} catch (IOException e) {
Logger.getRootLogger().error("HttpPost-流的方式:" + e.getMessage());
}
}
}
return content;
}
释放连接注意的问题:
上述示例中使用的httpEntity.consumeContent()自从4.1版本就已经废弃,不建议使用了,建议使用InputStream.close() on the input stream returned bygetContent()来完成。官方sample如下:
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
HttpGet httpget = new HttpGet("http://www.apache.org/");
// Execute HTTP request
CloseableHttpResponse response = httpclient.execute(httpget);
try {
// Get hold of the response entity
HttpEntity entity = response.getEntity();
// If the response does not enclose an entity, there is no need
// to bother about connection release
if (entity != null) {
InputStream instream = entity.getContent();//获取流对象
try {
instream.read();
// do something useful with the response
} catch (IOException ex) {
// In case of an IOException the connection will be released
// back to the connection manager automatically
throw ex;
} finally {
// Closing the input stream will trigger connection release
instream.close();
}
}
} finally {
response.close();
}
} finally {
httpclient.close();
}
也可以使用EntityUtils.consume(entity); Ensures that the entity content is fully consumed and the content stream, if exists, is closed.
官方建议使用这种方法:
@Deprecated
void consumeContent()
throws IOException
Deprecated. (4.1) Use EntityUtils.consume(HttpEntity)
This method is deprecated since version 4.1. Please use standard java convention to ensure resource deallocation by calling InputStream.close() on the input stream returned by getContent()
This method is called to indicate that the content of this entity is no longer required. All entity implementations are expected to release all allocated resources as a result of this method invocation. Content streaming entities are also expected to dispose
of the remaining content, if any. Wrapping entities should delegate this call to the wrapped entity.
This method is of particular importance for entities being received from a connection. The entity needs to be consumed completely in order to re-use the connection with keep-alive.
Throws:
IOException - if an I/O error occurs.
See Also:
and #writeTo(OutputStream)
HttpClient学习笔记的更多相关文章
- HttpClient学习整理
HttpClient简介HttpClient 功能介绍 1. 读取网页(HTTP/HTTPS)内容 2.使用POST方式提交数据(httpClient3) 3. 处理页面重定向 ...
- HttpClient 学习整理【转】
转自 http://www.blogjava.net/Alpha/archive/2007/01/22/95216.html HttpClient 是我最近想研究的东西,以前想过的一些应用没能有很好的 ...
- HttpClient 学习整理 (转)
source:http://www.blogjava.net/Alpha/archive/2007/01/22/95216.html HttpClient 是我最近想研究的东西,以前想过的一些应用没能 ...
- Android学习笔记之HttpClient实现Http请求....
PS:最近光忙着考试了....破组成原理都看吐了....搞的什么也不想干...写篇博客爽爽吧....貌似明天就考试了...sad... 学习笔记: 1.如何实现Http请求来实现通信.... 2.解决 ...
- ASP.NET MVC Web API 学习笔记---第一个Web API程序
http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...
- WebService学习笔记系列(二)
soap(简单对象访问协议),它是在http基础之上传递xml格式数据的协议.soap协议分为两个版本,soap1.1和soap1.2. 在学习webservice时我们有一个必备工具叫做tcpmon ...
- openstack学习笔记一 虚拟机启动过程代码跟踪
openstack学习笔记一 虚拟机启动过程代码跟踪 本文主要通过对虚拟机创建过程的代码跟踪.观察虚拟机启动任务状态的变化,来透彻理解openstack各组件之间的作用过程. 当从horizon界面发 ...
- 多线程编程学习笔记——编写一个异步的HTTP服务器和客户端
接上文 多线程编程学习笔记——使用异步IO 二. 编写一个异步的HTTP服务器和客户端 本节展示了如何编写一个简单的异步HTTP服务器. 1.程序代码如下. using System; using ...
- https学习笔记三----OpenSSL生成root CA及签发证书
在https学习笔记二,已经弄清了数字证书的概念,组成和在https连接过程中,客户端是如何验证服务器端的证书的.这一章,主要介绍下如何使用openssl库来创建key file,以及生成root C ...
随机推荐
- JavaScript学习总结(一)
概述 前端三剑客,html.css.js. 这三种语言基本是前端开发必备的东西,那么你知道这三种语言分别负责的功能是什么吗? html:负责了一个页面的结构 css:负责页面的样式 JavaScrip ...
- 查路由途径 traceroute tracert
linux 用 traceroute IP windows用 tracert IP 虚拟机下使用无效
- Django的URL路由基础
一.概述 URL路由在Django项目中的体现就是urls.py文件,这个文件可以有很多个,但绝对不会在同一目录下.实际上Django提倡项目有个根urls.py,各app下分别有自己的一个urls. ...
- JAVA初学者——算数运算符
Hello!大家好,我是浩宇大熊猫,又是学习java的一天,开开森森~ 运算符:也就是对常量或者变量进行操作的符号 表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式,不同的 ...
- 《Docekr入门学习篇》——Docker实战
基础环境 root@docker~]# cat /etc/redhat-release #查看版本号 CentOS Linux release (Core) [root@docker ~]# unam ...
- 吴裕雄--天生自然ShellX学习笔记:Shell test 命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值.字符和文件三个方面的测试. 实例演示: num1=100 num2=100 if test $[num1] -eq $[num2 ...
- ORB-SLAM2的编译运行以及TUM数据集测试
ORB-SLAM2的编译运行以及TUM数据集测试 徐大徐 2018.02.06 17:04 字数 1838 阅读 2167评论 0喜欢 2 近段时间一直在学习高翔博士的<视觉SLAM十四讲> ...
- dubbo的启动时检查
修改的消费者(xml) 修改的消费者(注解)
- 放贷额度相关的ROI计算
违约模型得到概率估计, 将概率值划分5档, 每一档确定一个授信系数 新的授信 = 每月收入* 授信系数 - 老的授信 计算新增授信额度 计算余额损失
- lambda concurrent List<Map> to Map
Object c = Stream.of( CompletableFuture.supplyAsync(() -> { Map m = new HashMap(); try { Thread.s ...