文档章节

HttpClient知识点摘录

night4soul
 night4soul
发布于 2015/11/03 14:16
字数 416
阅读 29
收藏 0

关于从HttpEntity中多次读取数据

官方教程说法:有些情况下,我们希望可以重复读取Http实体的内容。这就需要把Http实体内容缓存在内存或者磁盘上。最简单的方法就是把Http Entity转化成BufferedHttpEntity,这样就把原Http实体的内容缓冲到了内存中。后面我们就可以重复读取BufferedHttpEntity中的内容。

package com;

import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.entity.BufferedHttpEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class TestConnection {

	public static void main(String[] args) {

		CloseableHttpClient httpclient = HttpClients.createDefault();
		HttpGet httpget = new HttpGet("http://www.baidu.com/");
		CloseableHttpResponse response = null;
		try {
			try {
				response = httpclient.execute(httpget);
				HttpEntity entity = response.getEntity();
				if (entity != null) {
					// 实体进行缓冲,可重复使用
					entity = new BufferedHttpEntity(entity);
					FileOutputStream out = new FileOutputStream("f1.html");
					entity.writeTo(out);
					out.close();

					System.out.println("读第二次!");
					FileOutputStream out2 = new FileOutputStream("f2.html");
					entity.writeTo(out2);
					out2.close();
				}
			} finally {
				response.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				httpclient.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}

运行以上代码成功输出读取第二次,并生成f1,f2文件

将以下行注释掉重新测试

entity = new BufferedHttpEntity(entity);

输出报错提示Steam is closed,只能读取一次


模拟文件表单上传:基于httpclient4.5

HTTP1.1协议规定: multipart/form-data"类型已经被特别地定义用来处理Post请求方法传送的窗体数据,这在RFC 1867[15]里定义。

package com;

import java.io.File;
import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class TestConnection {

	public static void main(String[] args) {
		CloseableHttpClient httpclient = HttpClients.createDefault();
		HttpPost httpget = new HttpPost("http://localhost:8280/upload.do");
		File file = new File("C:/Users/username/Desktop/up/up.txt");
		System.out.println(file.exists());
		//构建Multipart实体
		MultipartEntityBuilder builder = MultipartEntityBuilder.create();
		HttpEntity fe = builder.addBinaryBody("file", file).build();
		httpget.setEntity(fe);
		CloseableHttpResponse response = null;
		try {
			try {
				System.out.println("executing request " + httpget.getRequestLine());  
				response = httpclient.execute(httpget);
			} finally {
				response.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				httpclient.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}


© 著作权归作者所有

上一篇: Servlet 文件上传
下一篇: JAVA IO 工具
night4soul
粉丝 0
博文 8
码字总数 3927
作品 0
苏州
私信 提问
HttpClient-4.5总结(1)

apache httpclient不多介绍这个工具是什么,具体请看官网,不赘述。 进行记录的原因一个是把掉过坑的地方记住,另一个是自httpclient-4.4开始,官方对代码进行了很多调整,4.4以前的很多class...

李不言
2016/03/24
0
0
HttpComponents Client 4.5.4,Java 的 HTTP 协议库

HttpComponents Client 4.5.4 已发布,修复了一些发现自 4.5.3 的问题。要注意的是需要 Java 1.6 及以上版本。更新内容如下: [HTTPCLIENT-1883] SystemDefaultCredentialsProvider to use ...

王练
2017/12/05
961
3
Android 浅谈HttpClient工具类

在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们使用各种Http服务。你可以把HttpClient想象成一个浏览器,通过它的...

Jonson
2013/07/25
714
3
HttpComponents Client 4.5.2 发布

HttpComponents Client 4.5.2 发布了,改进记录: Changelog: ------------------- * [HTTPCLIENT-1710, HTTPCLIENT-1718, HTTPCLEINT-1719] OSGi container compatibility improvements. Co......

淡漠悠然
2016/03/02
3K
2
HttpComponents 4.5.4 发布,Java 的 HTTP 协议库

HttpComponents Client 4.5.4 已发布。修复了一些发现自 4.5.3 的问题。 更新内容: [HTTPCLIENT-1883] SystemDefaultCredentialsProvider to use https.proxy* system properties for origi......

淡漠悠然
2017/12/01
754
1

没有更多内容

加载失败,请刷新页面

加载更多

经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0
实战项目-学成在线(八)

在前后端分离架构中,服务层被拆分成了很多的微服务,微服务的信息如何管理?Spring Cloud中提供服务注册中心来管理微服务信息。 注册中心作用: 1、微服务数量众多,要进行远程调用就需要知...

lianbang_W
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部