HttpClient模拟Post请求返回Byte数组

我这里使用的版本是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 maps) {  
	        HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost    
	        // 创建参数队列    
	        List nameValuePairs = new ArrayList();  
	        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"); 

你可能感兴趣的:(javaweb,Java程序员)