HttpClient模拟Post请求返回Byte数组
2016-09-14 10:58
1336 查看
我这里使用的版本是httpclient-4.5版本的。通过Post请求返回Byte数组。对数组进行读就行了
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
public class HttpUtil {
public static final Logger logger = LogManager.getLogger(HttpUtil.class);
private RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(15000)
.setConnectTimeout(15000)
.setConnectionRequestTimeout(15000)
.build();
private static HttpUtil instance = null;
private HttpUtil(){}
public static HttpUtil getInstance(){
if (instance == null) {
instance = new HttpUtil();
}
return instance;
}
/**
* 发送 post请求
* @param httpUrl 地址
*/
public byte[] sendHttpPost(String httpUrl) {
HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost
return sendHttpPost(httpPost);
}
/**
* 发送 post请求
* @param httpUrl 地址
* @param params 参数(格式:key1=value1&key2=value2)
*/
public byte[] sendHttpPost(String httpUrl, byte[] params) {
HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost
try {
//设置参数
// StringEntity stringEntity = new StringEntity(params, "UTF-8");
//HttpEntity byteEntity = new HttpEntity(params);
ByteArrayEntity arrayEntity = new ByteArrayEntity(params);
httpPost.setEntity(arrayEntity);
} catch (Exception e) {
e.printStackTrace();
}
return sendHttpPost(httpPost);
}
/**
* 发送 post请求
* @param httpUrl 地址
* @param maps 参数
*/
public byte[] sendHttpPost(String httpUrl, Map<String,String> maps) {
HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost
// 创建参数队列
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
for (String key : maps.keySet()) {
nameValuePairs.add(new BasicNameValuePair(key, maps.get(key)));
}
try {
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
} catch (Exception e) {
e.printStackTrace();
}
return sendHttpPost(httpPost);
}
/**
* 发送Post请求
* @param httpPost
* @return
*/
private byte[] sendHttpPost(HttpPost httpPost) {
CloseableHttpClient httpClient = null;
CloseableHttpResponse response = null;
HttpEntity entity = null;
byte[] responseContent = null;
try {
// 创建默认的httpClient实例.
httpClient = HttpClients.createDefault();
httpPost.setConfig(requestConfig);
// 执行请求
response = httpClient.execute(httpPost);
entity = response.getEntity();
responseContent = EntityUtils.toByteArray(entity);
// responseContent = EntityUtils.toString(entity, "UTF-8"); //如果需要返回字符串改这里就行了
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 关闭连接,释放资源
if (response != null) {
response.close();
}
if (httpClient != null) {
httpClient.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return responseContent;
}
}
如果需要返回字符串把
responseContent = EntityUtils.toByteArray(entity);改为下面这样就可以了。但一般都是返回Byte,这样对数据的加密解密好操作
responseContent = EntityUtils.toString(entity, "UTF-8");
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
public class HttpUtil {
public static final Logger logger = LogManager.getLogger(HttpUtil.class);
private RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(15000)
.setConnectTimeout(15000)
.setConnectionRequestTimeout(15000)
.build();
private static HttpUtil instance = null;
private HttpUtil(){}
public static HttpUtil getInstance(){
if (instance == null) {
instance = new HttpUtil();
}
return instance;
}
/**
* 发送 post请求
* @param httpUrl 地址
*/
public byte[] sendHttpPost(String httpUrl) {
HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost
return sendHttpPost(httpPost);
}
/**
* 发送 post请求
* @param httpUrl 地址
* @param params 参数(格式:key1=value1&key2=value2)
*/
public byte[] sendHttpPost(String httpUrl, byte[] params) {
HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost
try {
//设置参数
// StringEntity stringEntity = new StringEntity(params, "UTF-8");
//HttpEntity byteEntity = new HttpEntity(params);
ByteArrayEntity arrayEntity = new ByteArrayEntity(params);
httpPost.setEntity(arrayEntity);
} catch (Exception e) {
e.printStackTrace();
}
return sendHttpPost(httpPost);
}
/**
* 发送 post请求
* @param httpUrl 地址
* @param maps 参数
*/
public byte[] sendHttpPost(String httpUrl, Map<String,String> maps) {
HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost
// 创建参数队列
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
for (String key : maps.keySet()) {
nameValuePairs.add(new BasicNameValuePair(key, maps.get(key)));
}
try {
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
} catch (Exception e) {
e.printStackTrace();
}
return sendHttpPost(httpPost);
}
/**
* 发送Post请求
* @param httpPost
* @return
*/
private byte[] sendHttpPost(HttpPost httpPost) {
CloseableHttpClient httpClient = null;
CloseableHttpResponse response = null;
HttpEntity entity = null;
byte[] responseContent = null;
try {
// 创建默认的httpClient实例.
httpClient = HttpClients.createDefault();
httpPost.setConfig(requestConfig);
// 执行请求
response = httpClient.execute(httpPost);
entity = response.getEntity();
responseContent = EntityUtils.toByteArray(entity);
// responseContent = EntityUtils.toString(entity, "UTF-8"); //如果需要返回字符串改这里就行了
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 关闭连接,释放资源
if (response != null) {
response.close();
}
if (httpClient != null) {
httpClient.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return responseContent;
}
}
如果需要返回字符串把
responseContent = EntityUtils.toByteArray(entity);改为下面这样就可以了。但一般都是返回Byte,这样对数据的加密解密好操作
responseContent = EntityUtils.toString(entity, "UTF-8");
相关文章推荐
- HttpClient模拟get,post请求并发送请求参数(json等)
- java使用HttpURLConnection和HttpClient分别模拟get和post请求以及操作cookies
- 模拟http发送post请求并返回数据
- 用node.js搭建服务器,模拟返回json数据供客户端get,post请求使用
- 使用Httpclient向百度翻译提交POST请求 接受返回的JSON字符串 实现翻译功能(3)----BufferedReader与BufferedWriter的使用
- HttpClient 发送Post,Get请求例子(包含设置请求头信息和获取返回头信息)
- HttpClient模拟get,post请求并发送请求参数(json等)
- httpclient模拟post请求json封装表单数据
- HttpClient的POST请求示例及返回接收
- HttpClient模拟get,post请求并发送请求参数(json等)
- java使用httpclient模拟post请求和get请求示例
- Android入门:用HttpClient模拟HTTP的GET和POST请求
- httpclient模拟post请求json封装表单数据
- php curl模拟post请求和提交多维数组的示例代码
- 使用Httpclient向百度翻译提交POST请求 接受返回的JSON字符串 实现翻译功能(1)----程序实现原理
- 一步步教你为网站开发Android客户端---HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新ListView
- UWP——HttpClient模拟浏览器的GET、POST请求
- Android--httpclient模拟post请求和get请求
- httpclient模拟post请求json封装表单数据的实现方法
- 使用Httpclient向百度翻译提交POST请求 接受返回的JSON字符串 实现翻译功能(2)----Httpclient使用详解