- 浏览: 39605 次
文章分类
最新评论
备注:httpclient4.5 发送MultiPart/Param/String
import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPut; import org.apache.http.entity.ByteArrayEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.nio.client.CloseableHttpAsyncClient; import org.apache.http.impl.nio.client.HttpAsyncClients; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URI; import java.util.List; import java.util.Map; import java.util.concurrent.Future; /** * Http 工具类 * */ public class HttpHelper { /** *发送HttpPost方法 * * @param requestUrl * @param requestHeaderMap * @param requestBody * @return * @throws IOException */ public static HttpResponse httpPost(String requestUrl, Map<String, String> requestHeaderMap, String requestBody) throws IOException { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(requestUrl); if (requestHeaderMap != null) { for (String key : requestHeaderMap.keySet()) { httpPost.setHeader(key, requestHeaderMap.get(key)); } } if (requestBody != null && requestBody.length() > 0) { byte[] content = requestBody.getBytes("utf-8"); ByteArrayEntity entity = new ByteArrayEntity(content); httpPost.setEntity(entity); } return httpClient.execute(httpPost); } /** *异步发送HttpPost方法 * * @param requestUrl * @param requestHeaderMap * @param requestBody * @return * @throws IOException */ public static HttpResponse httpPostAsyn(String requestUrl, Map<String, String> requestHeaderMap, String requestBody) throws IOException { CloseableHttpAsyncClient httpAsyncClient = HttpAsyncClients.createDefault(); HttpPost httpPost = new HttpPost(requestUrl); if (requestHeaderMap != null) { for (String key : requestHeaderMap.keySet()) { httpPost.setHeader(key, requestHeaderMap.get(key)); } } if (requestBody != null && requestBody.length() > 0) { byte[] content = requestBody.getBytes("utf-8"); ByteArrayEntity entity = new ByteArrayEntity(content); httpPost.setEntity(entity); } HttpResponse response = null; try { httpAsyncClient.start(); Future<HttpResponse> future = httpAsyncClient.execute(httpPost, null); response = future.get();// 获取结果 } catch (Exception e) { e.printStackTrace(); } return response; } /** *发送 httpPostMultiPartAsyn方法 * * @return * @throws IOException */ public static HttpResponse httpPostMultiPartAsyn(final String url, final Map<String, String> headerMap, final HttpEntity httpEntity) { new Thread(){ @Override public void run() { httpPostMultiPart(url, headerMap, httpEntity); } }.start(); return null; } /** *发送httpPostMultiPart方法 * * @return * @throws IOException */ public static HttpResponse httpPostMultiPart(String url, Map<String, String> headerMap, HttpEntity httpEntity) { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(url); HttpResponse response = null; if (headerMap != null) { for (String key : headerMap.keySet()) { httpPost.setHeader(key, headerMap.get(key)); } } httpPost.setEntity(httpEntity); try { httpClient.execute(httpPost); } catch (IOException e) { e.printStackTrace(); } return response; } /** *发送httpPostParam * * @return * @throws IOException */ public static HttpResponse httpPostParam(String url, Map<String, String> headerMap, List<NameValuePair> nvps) { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(url); HttpResponse response = null; if (headerMap != null) { for (String key : headerMap.keySet()) { httpPost.setHeader(key, headerMap.get(key)); } } try { httpPost.setEntity(new UrlEncodedFormEntity(nvps)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } try { httpClient.execute(httpPost); } catch (IOException e) { e.printStackTrace(); } return response; } /** * 发送HttpPut方法 * * * @param requestUrl * @param requestHeaderMap * @param requestBody * @return * @throws IOException */ public static HttpResponse httpPut(String requestUrl, Map<String, String> requestHeaderMap, String requestBody) throws IOException { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPut httpPut = new HttpPut(requestUrl); if (requestHeaderMap != null) { for (String key : requestHeaderMap.keySet()) { httpPut.setHeader(key, requestHeaderMap.get(key)); } } if (requestBody != null && requestBody.length() > 0) { byte[] content = requestBody.getBytes("utf-8"); ByteArrayEntity entity = new ByteArrayEntity(content); httpPut.setEntity(entity); } return httpClient.execute(httpPut); } /** * 发送HttpGet方法 * * @param requestUrl * @param requestHeaderMap * @return * @throws IOException */ public static HttpResponse httpGet(String requestUrl, Map<String, String> requestHeaderMap) throws IOException { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(requestUrl); if (requestHeaderMap != null) { for (String key : requestHeaderMap.keySet()) { httpGet.setHeader(key, requestHeaderMap.get(key)); } } return httpClient.execute(httpGet); } /** * 发送HttpDelete方法 * * @param requestUrl * @param requestHeaderMap * @return * @throws IOException */ public static HttpResponse httpDelete(String requestUrl, Map<String, String> requestHeaderMap, String requestBody) throws IOException { CloseableHttpClient httpClient = HttpClients.createDefault(); ImHttpDelete imHttpDelete = new ImHttpDelete(requestUrl); if (requestHeaderMap != null) { for (String key : requestHeaderMap.keySet()) { imHttpDelete.setHeader(key, requestHeaderMap.get(key)); } } if (requestBody != null && requestBody.length() > 0) { byte[] content = requestBody.getBytes("utf-8"); ByteArrayEntity entity = new ByteArrayEntity(content); imHttpDelete.setEntity(entity); } return httpClient.execute(imHttpDelete); } static class ImHttpDelete extends HttpEntityEnclosingRequestBase { public final static String METHOD_NAME = "DELETE"; public ImHttpDelete() { super(); } public ImHttpDelete(final URI uri) { super(); setURI(uri); } /** * @throws IllegalArgumentException if the uri is invalid. */ public ImHttpDelete(final String uri) { super(); setURI(URI.create(uri)); } @Override public String getMethod() { return METHOD_NAME; } } }
发表评论
-
JVM内存结构及分析
2017-07-16 19:38 563JVM内存模型 名称特征 ... -
JVM调优实例
2017-06-24 12:30 01.背景:由于最近上线新增业务模块,业务量要增加所以对上线服务 ... -
音视频编码转换-ffmpeg
2016-12-30 18:42 15781.前言 由于最近在做ios与android端需要做a ... -
git did not match any file(s) known to git
2016-04-23 23:49 31181.did not match any file(s) kno ... -
Static工具类线程安全问题
2016-01-08 11:39 23471.静态方法 无论是静态方法还是实例方法,在内存中都只 ... -
JavaThread-ThreadLocal笔记
2015-12-23 14:54 5311.ThreadLocal简介 早在JDK 1.2的版本中就提 ... -
JUC-CountDownLatch笔记
2015-12-23 10:53 5621.CountDownLatch简介 CountDownLat ... -
Lambda表达式实现设计模式:命令模式
2015-10-13 09:59 706如何在使用Java 8 Lambda表达式的函数式编程方式时实 ... -
mysql 错误汇总
2015-08-12 16:49 4361.Mysql ERROR 1045 (28000): Acc ... -
Java注解
2015-08-07 11:25 01.@Retention(RetentionPolicy.RU ... -
Base64 编解码 工具类
2015-07-28 22:48 42861.工具类: import java.io.Uns ... -
转载-搜索引擎实时秒级更新
2015-07-08 14:02 859搜索是很多用户在天 ... -
tomcat-定时任务
2015-03-30 15:27 6571.监听类 import java.util.Timer ... -
JVM-工作原理
2015-03-16 23:26 644一、 JVM的生命周期 1. J ... -
tomcat-启动时启动额外线程并控制线程状态
2015-02-04 18:22 675通过启动线程可以进行后台的操作 1.创建servlet ... -
Exception in thread "main" SoapFault - faultcode: 'soapenv:Server.userException'
2015-01-20 22:32 14281.抛出此类错误大部分都是服务端发布webservice调用出 ... -
Tomcat映射虚拟目录
2015-01-19 22:43 01.设置虚拟目录 <Host>标签</H ... -
android-运行java main方法
2014-12-30 16:10 7191.右键入口类(含有Main方法的)Run Configura ... -
Mybatis 常见错误汇总
2014-12-28 22:31 01.插入数据到数据库是异常 ### Cause: java.s ... -
jsoup
2014-12-17 00:25 01. package com.wuhao.itinfo ...
相关推荐
要将一个C#对象序列化为JSON字符串,可以使用`JsonConvert.SerializeObject()`方法;反序列化则使用`JsonConvert.DeserializeObject()`。 例如: ```csharp using Newtonsoft.Json; public class User { public ...
1. **参数传递**:HttpClientUtils支持传递URL参数,它可以方便地将键值对转换为HTTP请求中的查询字符串,使得发送带有参数的GET请求或者POST请求变得更加简单。 2. **文件上传**:HttpClientUtils集成了文件上传...
2. **创建边界字符串**:在`multipart/form-data`中,你需要一个唯一的字符串作为分隔符,即边界。这个边界字符串应该在请求头中设置,并在数据的每个部分之间插入。 3. **构造请求体**:在C#中,你需要手动构造...
2. 发送JSON数据的POST请求:创建一个`StringContent`实例,设置其内容为序列化的JSON字符串,然后用`HttpClient`发送请求。 ```csharp using (var client = new HttpClient()) { var jsonContent = new String...
在C#中,我们可以使用HttpClient类来构造并发送这样的POST请求。首先,需要创建一个MultipartFormDataContent对象,然后添加键值对或文件流。例如: ```csharp using System.Net.Http; using System.IO; var ...
3. **请求参数传递**:可以通过URL查询字符串、POST请求体或multipart/form-data方式发送请求参数。 4. **连接管理**:HttpClient允许你配置连接池,以复用TCP连接,减少网络延迟,提高性能。 5. **超时控制**:...
在Java中,可以使用`***.HttpURLConnection`或者第三方库如Apache的`HttpClient`来发送带有`multipart/form-data`的请求。然而,Java标准库并没有直接提供将`Map`对象转换为这种类型数据的方法,因此需要我们自己...
此媒体类型格式化程序也可以用于发送对象(使用HttpClient),并将对象自动序列化为multipart / form-data。 该格式化程序可以处理: 自定义不可枚举类(支持深层嵌套类) 所有可以从字符串转换为字符串的简单类型...
在Android开发中,如果需要通过HTTP客户端(如HttpClient)将图片上传到服务器,由于HTTP协议本身只支持ASCII字符,不能直接传输二进制数据,因此通常会先将图片数据转化为Base64字符串,再以文本形式发送,服务器端...
2. 构建POST数据字符串。这通常涉及到将表单字段及其对应的值用"&"分隔,并对特殊字符进行URL编码,以确保数据的正确性。C#中的`HttpUtility.UrlEncode`方法用于此目的: ```csharp StringBuilder postData = new ...
例如,可以将参数作为查询字符串的一部分,或者封装在POST请求体中。 8. **服务器端处理**: - 在ASHX处理程序中,需要解析`HttpContext.Current.Request.InputStream`以获取文件数据,同时可以从`Request.Form`中...
6. **边界(Boundary)**:在Multipart/form-data中,每个部分都由一个唯一的边界字符串标识,用于区分不同的数据段。在Java代码中,我们需要生成一个唯一的边界,并在HTTP请求的Content-Type头和每个部分的开始和...
- 先构建一个字符串,包含文件的Content-Disposition(定义数据的名称和文件名)和Content-Type(定义文件类型)。 - 将这个字符串写入到`DataOutputStream`,然后读取文件内容并写入到输出流。 - 最后,添加一个...
Base64编码将二进制数据转化为ASCII字符串,简单但数据量会增加约33%;Multipart则是HTTP协议中用于上传文件的标准,更适用于大文件传输。 3. **处理多线程**:由于Android主线程不允许进行耗时操作,包括网络请求...
1. **Commons Lang**:提供了一系列高级的字符串处理、日期时间操作、数学计算以及反射相关的工具类。例如,`StringUtils`提供了丰富的字符串操作方法,`DateUtils`则简化了日期时间的操作。 2. **Commons ...
"com-codec"标签可能是指编解码相关的组件,因为文件上传通常涉及到数据编码,比如将文件内容转换为字节数组或Base64字符串。在上传过程中,Android开发者可能会使用Java的内置Codec类或第三方库,如Gson或Jackson,...
在提供的文件名`b8e1e3910e214bea80caa15f58b3f233`中,看起来像是一个哈希值或随机字符串,它可能是实际文件的唯一标识符或临时存储位置。在实际操作中,这可能会用于跟踪上传的文件或者作为服务器端存储文件的命名...
请求参数包括appkey、callback和data三个部分,其中appkey为登录平台->我的数据->找到接口下面字符串为平台key,callback为支持jsonp跨域请求的参数,data为文件流存入requestBody中。 响应参数包括code、success、...
接下来,httpmime-4.1.1还提供了FileBody和StringBody等类,用于封装文件和字符串内容,作为MIME实体的一部分。这些类简化了将本地文件或字符串内容转换为HTTP请求体的过程。例如,FileBody允许你直接指定一个文件...
4. **处理响应**:`UploadData`方法会返回服务器的响应,通常是一个字符串,可以根据需要进行解析,如检查返回的状态码或提取返回的数据。 需要注意的是,这个例子中的边界字符串(`boundary`)是用来分割不同的...