HttpClient 自己整合的发送get post put 和delete 一个方法
啥也不说,直接上代码。
/** * * @param postType 0:get,1:post, 2:put, 3:delete * @param url * @param contentType {@link org.apache.http.entity.ContentType contentType} * @param headers 请求头参数集合 * @param clientCookies 包含的cookie * @param jsonObject 请求参数 * @return */ public static CloseableHttpResponse httpClient(String postType, String url, ContentType contentType, Map<String,String> headers, List<BasicClientCookie> clientCookies, JSONObject jsonObject) { CloseableHttpClient httpClient = HttpClients.createDefault(); if(clientCookies != null && !clientCookies.isEmpty()) { BasicCookieStore cookieStore = new BasicCookieStore(); cookieStore.addCookies(clientCookies.toArray(new Cookie[]{})); httpClient = HttpClients.custom().setDefaultCookieStore(cookieStore).build(); } CloseableHttpResponse httpResponse = null; HttpEntity entity = null; try { if ("0".equals(postType)) { //===== get =====// URIBuilder uriBuilder = new URIBuilder(url); // 设置参数 if(jsonObject != null && !jsonObject.isEmpty()) { List<NameValuePair> list = new LinkedList<>(); for (Map.Entry<String,?> entry : jsonObject.entrySet()) { list.add(new BasicNameValuePair(entry.getKey(), jsonObject.getString(entry.getKey()))); } uriBuilder.addParameters(list); } HttpGet httpGet = new HttpGet(uriBuilder.build()); httpGet.setProtocolVersion(HttpVersion.HTTP_1_0); //设置header setHttpClientHeaders(contentType, headers, httpGet); //发送请求 httpResponse = httpClient.execute(httpGet); } else if("1".equals(postType)) { //===== post =====// HttpPost httpPost = new HttpPost(url); // 设置请求头 setHttpClientHeaders(contentType, headers, httpPost); //增加参数 if(contentType == ContentType.APPLICATION_JSON) { if(jsonObject != null && !jsonObject.isEmpty()) { httpPost.setEntity(new StringEntity(jsonObject.toString(),"UTF-8")); } } else if(contentType == ContentType.APPLICATION_FORM_URLENCODED) { // 设置参数 setHttpClientEntity(jsonObject, httpPost); } httpResponse = httpClient.execute(httpPost); } else if("2".equals(postType)) { //===== put =====// HttpPut httpPut = new HttpPut(url); // 设置请求头 setHttpClientHeaders(contentType, headers, httpPut); // 设置参数 setHttpClientEntity(jsonObject, httpPut); httpResponse = httpClient.execute(httpPut); } else if ("3".equals(postType)) { //===== delete =====// // HttpDelete httpDelete = new HttpDelete(url); HttpDeleteWithBody httpDelete = new HttpDeleteWithBody(url); // 设置请求头 setHttpClientHeaders(contentType, headers, httpDelete); // 设置参数 setHttpClientEntity(jsonObject, httpDelete); httpResponse = httpClient.execute(httpDelete); } // //返回结果 // entity = httpResponse.getEntity(); // String s = EntityUtils.toString(entity, "utf-8"); // EntityUtils.consume(entity); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (URISyntaxException e) { e.printStackTrace(); } return httpResponse; } /** * 根据响应获取响应实体 * * @param response * @return */ public static <T> T getContent(CloseableHttpResponse response, Class<T> clazz) { HttpEntity entity = response.getEntity();// 获取响应实体 T content = null; try { if(content instanceof String) { content = (T) EntityUtils.toString(entity, "utf-8");// 用string接收响应实体 } else if(clazz.isArray()) { content = (T) EntityUtils.toByteArray(entity); } EntityUtils.consume(entity);// 消耗响应实体,并关闭相关资源占用 } catch (ParseException e1) { e1.fillInStackTrace(); } catch (Exception e1) { e1.fillInStackTrace(); } finally { release(response); } return content; } public static void release(CloseableHttpResponse response) { if(response != null) { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } } private static void setHttpClientHeaders(ContentType contentType, Map<String, String> headers, HttpRequestBase httpClient) { httpClient.setHeader("Content-type", contentType.getMimeType()); httpClient.setHeader("DataEncoding", "UTF-8"); if(headers != null && !headers.isEmpty()) { for (Map.Entry<String, String> entry : headers.entrySet()) { httpClient.setHeader(entry.getKey(),entry.getValue()); } } } private static void setHttpClientEntity(JSONObject jsonObject, HttpEntityEnclosingRequestBase httpClient) throws UnsupportedEncodingException { if(jsonObject != null && !jsonObject.isEmpty()) { List<NameValuePair> list = new LinkedList<>(); for (Map.Entry<String,?> entry : jsonObject.entrySet()) { list.add(new BasicNameValuePair(entry.getKey(), jsonObject.getString(entry.getKey()))); } UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(list); httpClient.setEntity(formEntity); } } @NotThreadSafe static class HttpDeleteWithBody extends HttpEntityEnclosingRequestBase { public static final String METHOD_NAME = "DELETE"; @Override public String getMethod() { return METHOD_NAME; } public HttpDeleteWithBody(final String uri) { super(); setURI(URI.create(uri)); } public HttpDeleteWithBody(final URI uri) { super(); setURI(uri); } public HttpDeleteWithBody() { super(); } } public static void main(String[] args) throws IOException { String jsessionId = RandomStringUtils.randomAlphanumeric(32).toUpperCase(); String ocrCode = getOCRCode("http://localhost:8888/crm/res/Kaptcha.jpg", jsessionId); // loginCRM("http://localhost:8888/crm/login_checkUser.json","superadmin","29AD0E3FD3DB681FB9F8091C756313F7","99999999",ocrCode,jsessionId); }
同一个方法根据传入参数可以执行get post put 和 delete 方法
本文来自博客园,作者:margo,转载请注明原文链接:https://www.cnblogs.com/ZMargo/articles/12063314.html