HttpClient知识点摘录

关于从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();
			}
		}
	}
}


转载于:https://my.oschina.net/night4soul/blog/525271

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值