httpclient 4.3 post form带参数,提交文件/二进制数据

HttpClient httpClient = HttpClients.createDefault();
HttpPost httppost = new HttpPost(url);
MultipartEntityBuilder mEntityBuilder = MultipartEntityBuilder.create();
//byte[] postBody
mEntityBuilder.addBinaryBody(postName, postBody);
//提交文件
//File file = new File("test");
//mEntityBuilder.addBinaryBody("name", file);
mEntityBuilder.addTextBody("name", "Value");
httppost.setEntity(mEntityBuilder.build());
HttpResponse responce = httpClient.execute(httppost);

不写成接口:可以直接写在一起

HttpEntity reqEntity = MultipartEntityBuilder.create()
	.setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
	.addPart("multipartFile", bin)
	.addPart("userId", userId).setCharset(CharsetUtils.get("UTF-8")).build();

不带参数时:可以直接定义指定的entity

File file = new File("somefile.txt");
FileEntity reqEntity = new FileEntity(file, ContentType.create("text/plain", "UTF-8"));

byte[] b;
ByteArrayEntity entity = new ByteArrayEntity(b) ;

下面是我自己定义的接口:

	/**
	 * Http request :Post
	 *
	 * @param url
	 * @param postBody(Byte)
	 * @param postName
	 * @param params
	 * @param heads
	 * @param timeOut(Millisecond)
	 * @return String of request result
	 */
	public static String postFile(String url, byte[] postBody, String postName, Map params,
			Map heads, Integer timeOut) throws HttpErrorException {
		String reStr = "";
		try {
			HttpClient httpClient = HttpClients.createDefault();
			HttpPost httppost = new HttpPost(url);

			MultipartEntityBuilder mEntityBuilder = MultipartEntityBuilder.create();
			mEntityBuilder.addBinaryBody(postName, postBody);

			if (params != null) {
				// text params
				for (Entry e : params.entrySet()) {
					mEntityBuilder.addTextBody(e.getKey(), e.getValue());
				}
			}

			httppost.setEntity(mEntityBuilder.build());
			if (heads != null) {
				// 一般要求プロパティを設定します
				for (Entry e : heads.entrySet()) {
					httppost.addHeader(e.getKey(), e.getValue());
				}
			}

			// set Timeout
			RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(timeOut)
					.setConnectTimeout(timeOut).setSocketTimeout(timeOut).build();
			httppost.setConfig(requestConfig);
			// get responce
			HttpResponse responce = httpClient.execute(httppost);
			// get http status code
			int resStatu = responce.getStatusLine().getStatusCode();

			if (resStatu == HttpStatus.SC_OK) {
				// get result data
				HttpEntity entity = responce.getEntity();
				reStr = EntityUtils.toString(entity);
			}
			else {
				log.error(url + ": resStatu is " + resStatu);
				throw new HttpErrorException(url, "resStatu is" + resStatu);
			}
		}
		catch (ConnectionPoolTimeoutException e) {
			log.error("http post throw ConnectionPoolTimeoutException", e);
			throw new HttpErrorException(url, " throw timeout");
		}
		catch (ConnectTimeoutException e) {
			log.error("http post throw ConnectTimeoutException", e);
			throw new HttpErrorException(url, " throw timeout");
		}
		catch (SocketTimeoutException e) {
			log.error("http post throw SocketTimeoutException", e);
			throw new HttpErrorException(url, " throw timeout");
		}
		catch (HttpErrorException e) {
			throw e;
		}
		catch (Exception e) {
			log.error("http post throw Exception", e);
			throw new HttpErrorException(url, " throw Exception");
		}
		return reStr;
	}
时间: 2024-10-02 19:30:26

httpclient 4.3 post form带参数,提交文件/二进制数据的相关文章

form表单提交文件(input file)

包含文件上传的form表单提交,要添加属性 enctype="multipart/form-data" <form method="post" id="create_form" action="" enctype="multipart/form-data"> <table style="display: table;"> <tr> <td>

form表单提交文件

<form action="http://localhost....." method="post" enctype="multipart/form-data"> <input type="file" id="fileId" name="image" value="请上传图片" /> <input type="hidden&qu

form search 带参数 提交

1 $('#f1').submit(function(){ 2 location.href = 'salebuyerList.html?param1=aaa&param2=' + $('#s1').val(); 3 return false; 4 }) 5 6 7 <form id="f1"> 8 <input id="s1" class="cSearchBox" type="search" />

Extjs的form跨域提交文件时,无法获取返回结果

form文件表单跨域提交时,无法获取远程服务器的返回结果,form提交代码如下: form.submit({ url:'http://{remoteUrl}/hgisserver/wrds/file', waitMsg: 'Reading your file...', method : 'POST', success: function(fp, o) { console.log(o); }, failure: function(form, action) { console.log(action

js实现无刷新表单提交文件,将ajax请求转换为form请求方法

最近在做项目的时候遇到一个需要上传文件的需求,因为ajax请求是无法上传二进制文件流的,所以只能用form表单提交,而form提交有一个问题就是会使页面刷新,本文解决了form表单提交文件时页面刷新的问题. 一.无刷新实现form提交文件 将form的target指向为一个iframe就可以实现无刷新提交文件了,但关键是还需要看到后台返回的数据,所以还需要为该iframe注册一个回调函数,因为iframe和该页面在同域内,所以可以在iframe里可以调用该回调函数,就可以看到后台返回的数据了.实

Linux curl 模拟form表单提交信息和文件

curl是一个命令行方式下传输数据的开源传输工具,支持多种协议:FTP.HTTP.HTTPS.IMAP.POP3.TELNET等,功能超级强大. 我今天想说的是程序开发中常用的模拟Form提交 1.GET提交 特别简单直接写url里面 2.POST提交    通过 --data/-d 方式指定使用POST方式传递数据 3.模拟form表单提交文件  --form/-F 模拟form表单提交文件 这个命令超级好用,再也不用为了写上传接口,而被迫写一个Form表单了 "[email protecte

django Form组件 上传文件

上传文件 注意:FORM表单提交文件要有一个参数enctype="multipart/form-data" 普通上传: urls: url(r'^f1/',views.f1), url(r'^f2/',views.f2), views: def f1(request): if request.method == "GET": return render(request,'f1.html') else: import os #导入os模块 #request.get /

论httpclient上传带参数【commons-httpclient和apache httpclient区别】

需要做一个httpclient上传,然后啪啪啪网上找资料 1.首先以前系统中用到的了commons-httpclient上传,找了资料后一顿乱改,然后测试 PostMethod filePost = new PostMethod(url); filePost.setParameter("system", "vinuxpost"); try { Part part[] = UploadRequestHelper.getPart(request); filePost.s

SpringMVC中使用bean来接收form表单提交的参数时的注意点

这是前辈们对于SpringMVC接收表单数据记录下来的总结经验: SpringMVC接收页面表单参数 springmvc请求参数获取的几种方法 下面是我自己在使用时发现的,前辈们没有记录的细节和注意点: 使用bean来接收form表单提交的参数时,pojo中必须含有默认的(即空的)构造函数,同时,需要设置到bean中的变量必须有setter方法. 注:以下代码均为示例代码,非本人实际运行代码,请自行补充. 例如:我有一个bean类是User,具有变量username和password.同时,表单