HttpClient模拟Post请求返回Byte数组

    xiaoxiao2022-06-23  13

    我这里使用的版本是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");

    转载请注明原文地址: https://ju.6miu.com/read-1123099.html

    最新回复(0)