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


你可能感兴趣的:(HttpClient知识点摘录)