推荐另外一个工具:
OKHttpUtil 功能
- 根据URL自动判断是请求HTTP还是HTTPS,不需要单独写多余的代码。
- 默认情况下Cookie自动记录,比如可以实现模拟登录,即第一次访问登录URL后后续请求就是登录状态。
- 自动识别304跳转并二次请求
- 支持代理配置
- 支持referer配置
- 支持User-Agent配置
- 自动识别并解压Gzip格式返回内容
- 支持springboot 配置文件
- 极简的封装调用
<dependency> <groupId>io.github.admin4j</groupId> <artifactId>http</artifactId> <version>0.4.0</version> </dependency>
Get
Response response = HttpUtil.get(https://github.com/search, Pair.of(q, okhttp)); System.out.println(response = + response);
一行代码即可搞定,当然Post请求也很简单: # JSON 格式的body Response post = HttpUtil.post(https://oapi.dingtalk.com/robot/send?access_token=27f5954ab60ea8b2e431ae9101b1289c138e85aa6eb6e3940c35ee13ff8b6335, {\msgtype\: \text\,\text\: {\content\:\【反馈提醒】我就是我, 是不一样的烟火\}}); System.out.println(post = + post); # form 请求 Map<String, Object> formParams = new HashMap<>(16); formParams.put(username, admin); formParams.put(password, admin123); Response response = HttpUtil.postForm(http://192.168.1.13:9100/auth/login, formParams ); System.out.println(response = + response); 返回格式为JSON的 可以使用 HttpJsonUtil 自动返回JsonObject JSONObject object=HttpJsonUtil.get(https://github.com/search, Pair.of(q,http), Pair.of(username,agonie201218)); System.out.println(object = +object); 文件上传 File file=new File(C:\\Users\\andanyang\\Downloads\\Sql.txt); Map<String, Object> formParams=new HashMap<>(); formParams.put(key,test); formParams.put(file,file); formParams.put(token,WXyUseb-D4sCum-EvTIDYL-mEehwDtrSBg-Zca7t:qgOcR2gUoKmxt-VnsNb657Oatzo=:eyJzY29wZSI6InpoYW56aGkiLCJkZWFkbGluZSI6MTY2NTMwNzUxNH0=); Response response=HttpUtil.upload(https://upload.qiniup.com/,formParams); System.out.println(response); 下载文件 HttpUtil.down(https://gitee.com/admin4j/common-http,path/); HttpRequest 链式请求 # get Response response=HttpRequest.get(https://search.gitee.com/?skin=rec&type=repository) .queryMap(q,admin4j) .header(HttpHeaderKey.USER_AGENT,admin4j) .execute(); System.out.println(response = +response); # post form Response response=HttpRequest.get(http://192.168.1.13:9100/auth/login) .queryMap(q,admin4j) .header(HttpHeaderKey.USER_AGENT,admin4j) .form(username,admin) .form(password,admin123) .execute(); System.out.println(response = +response);
httpUtils (commons-httpclient)
0.依赖:
<!-- https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient --> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </dependency>
最终整理:
package com.icil.esolution.utils; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.ArrayList; import java.util.Base64; import java.util.Map; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.ByteArrayRequestEntity; import org.apache.commons.httpclient.methods.DeleteMethod; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.RequestEntity; import org.apache.commons.httpclient.methods.multipart.FilePart; import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity; import org.apache.commons.httpclient.methods.multipart.Part; import org.apache.commons.httpclient.methods.multipart.StringPart; import org.apache.commons.httpclient.params.HttpMethodParams; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; import org.springframework.web.multipart.MultipartFile; /*********************************************************************** * <PRE> * * File Name : URLHttpUtils.java * * Creation Date : Aug 24, 2018 * * Author : sea * * * </PRE> ***************************************************************************/ public class URLHttpUtils { private static final Logger logger = LoggerFactory.getLogger(URLHttpUtils.class); public static synchronized String HttpClientRequest(String message, Header header, String operation, String url) { RequestEntity entity = null; String response = null; PostMethod postMethod = null; try { logger.info("Enter into HttpClientRequest method "); entity = new ByteArrayRequestEntity(message.getBytes("UTF-8")); HttpClient httpClient = new HttpClient(); postMethod = new PostMethod(url + operation); postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8"); if (header != null) { postMethod.setRequestHeader(header); } postMethod.setRequestEntity(entity); httpClient.executeMethod(postMethod); response = postMethod.getResponseBodyAsString(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { postMethod.releaseConnection(); } logger.info("complete of the HttpClientRequest method"); return response; } /** * 2018-08-26 sea add 3 try * * @param jsonMessage * @param targetUrl * @param header * @return */ public static synchronized String HttpClientPostRequest(String jsonMessage, String targetUrl, Header header) { logger.info("debug the json message " + jsonMessage); logger.info("debug targetUrl " + targetUrl); RequestEntity entity = null; String response = null; PostMethod postMethod = null; HttpClient httpClient = new HttpClient(); try { logger.info("Enter into HttpClientRequest method "); entity = new ByteArrayRequestEntity(jsonMessage.getBytes("UTF-8")); postMethod = new PostMethod(targetUrl); postMethod.addRequestHeader("Content-Type", "application/json"); // postMethod.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8"); if (header != null) { postMethod.setRequestHeader(header); } postMethod.setRequestEntity(entity); httpClient.executeMethod(postMethod); response = postMethod.getResponseBodyAsString(); } catch (Exception e) { logger.info("connect fail ,try to connect again!"); e.printStackTrace(); try { httpClient.executeMethod(postMethod); response = postMethod.getResponseBodyAsString(); } catch (Exception e2) { logger.info("connect second fail ,try to third time connect !"); e2.printStackTrace(); try { httpClient.executeMethod(postMethod); response = postMethod.getResponseBodyAsString(); } catch (Exception e3) { logger.info("third time connect fail !"); e3.printStackTrace(); MDC.put("concectException", e3.toString()); } } } finally { postMethod.releaseConnection(); } logger.info("Complete of the HttpClientRequest method"); return response; } /** * @param url * */ public static synchronized String deleteURLRequest(String targetUrl, Map<String, String> map) { logger.info("Enter into getURLRequest method "); logger.info("debug targetUrl " + targetUrl); String response = null; DeleteMethod deleteMethod = null; try { HttpClient httpClient = new HttpClient(); deleteMethod = new DeleteMethod(targetUrl); deleteMethod.addRequestHeader(map.get("apiKey"), map.get("apiValue")); httpClient.executeMethod(deleteMethod); response = deleteMethod.getResponseBodyAsString(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { deleteMethod.releaseConnection(); } logger.info("Complete of the getURLRequest method"); return response; } /** * @param url * , postData @return String @throws */ public static synchronized String getURLRequest(String targetUrl, Map<String, String> map) { logger.info("Enter into getURLRequest method "); logger.info("debug targetUrl " + targetUrl); String response = null; GetMethod getMethod = null; try { HttpClient httpClient = new HttpClient(); getMethod = new GetMethod(targetUrl); getMethod.addRequestHeader(map.get("apiKey"), map.get("apiValue")); httpClient.executeMethod(getMethod); response = getMethod.getResponseBodyAsString(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { getMethod.releaseConnection(); } logger.info("Complete of the getURLRequest method"); return response; } /** * sea add 2 try again 2018-08-24 * * @param targetUrl * @param header * @return */ public static synchronized String getURLRequest(String targetUrl, Header header) { logger.info("Enter into getURLRequest method "); logger.info("debug targetUrl is {}", targetUrl); String response = null; GetMethod getMethod = null; HttpClient httpClient = new HttpClient(); getMethod = new GetMethod(targetUrl); if (header != null) { getMethod.addRequestHeader(header); } try { httpClient.executeMethod(getMethod); response = getMethod.getResponseBodyAsString(); } catch (Exception e) { logger.info("get connect fail, try to second connect"); e.printStackTrace(); try { httpClient.executeMethod(getMethod); response = getMethod.getResponseBodyAsString(); } catch (Exception e1) { logger.info("get connect fail, try to third time connect"); e1.printStackTrace(); try { httpClient.executeMethod(getMethod); response = getMethod.getResponseBodyAsString(); } catch (Exception e2) { logger.info("It have third time connect but still connect fail,and exception is {}", e2); MDC.put("concectException", e2.toString()); e2.printStackTrace(); } } } finally { getMethod.releaseConnection(); } logger.info("Complete of the getURLRequest method"); return response; } /** * @Desc POST方式 传带文件的调用 * @return * @throws Exception */ public static String postFileMethod(String url,Map<String,String> params,String multipartFileName,MultipartFile multipartFile,Header header){ HttpClient client = new HttpClient(); PostMethod method = new PostMethod(url); method.addRequestHeader(header); String response= null; int result=0; try { File file = null; if(multipartFile!=null) { //transfer MultipartFile to file String filename = multipartFile.getName(); String originalFilename = multipartFile.getOriginalFilename(); int lastIndexOf = originalFilename.lastIndexOf("."); String suffix = originalFilename.substring(lastIndexOf); file=File.createTempFile(filename, suffix); multipartFile.transferTo(file); file.deleteOnExit(); FilePart filePart = new FilePart(multipartFileName,file);//文件参数 //set params ArrayList<StringPart> paramList = new ArrayList<>(); if(params.size()>0){ for (Map.Entry<String, String> entry : params.entrySet()) { StringPart param = new StringPart(entry.getKey(), entry.getValue()); //普通参数 paramList.add(param); } } int size = paramList.size(); Part[] parts =new Part[size+1]; for(int i=0;i<size;i++){ parts[i]=paramList.get(i); } parts[size]=filePart; MultipartRequestEntity mre=new MultipartRequestEntity(parts ,method.getParams()); //封装了普通字段和文件字段 method.setRequestEntity(mre ); result = client.executeMethod(method); response = method.getResponseBodyAsString(); // response= responseHandler(result,method); //NOSONAR } } catch (Exception e) { e.printStackTrace(); logger.info("post data to 3th fail ,try to post again."); try { result = client.executeMethod(method); // response= responseHandler(result,method); //NOSONAR response = method.getResponseBodyAsString(); } catch (Exception e2) { logger.info("post data to 3th second tine fail ,try to post again."); try { result = client.executeMethod(method); // response= responseHandler(result,method); //NOSONAR response = method.getResponseBodyAsString(); } catch (Exception e3) { e3.printStackTrace(); MDC.put("concectException", e3.toString()); logger.info("post data to 3th third tine fail ."); } } } finally { method.releaseConnection(); } logger.info("end the PostMethodFile method"); return response; } /** * test post method * @param result * @param method * @return * @throws IOException */ /** * @Desc POST方式 传带文件的调用 * @return * @throws Exception */ public static String postFile(String url,String multipartFileName,MultipartFile multipartFile,Header header){ HttpClient client = new HttpClient(); PostMethod method = new PostMethod(url); method.addRequestHeader(header); String response= null; int result=0; try { File file = null; if(multipartFile!=null) { //transfer MultipartFile to file String filename = multipartFile.getName(); String originalFilename = multipartFile.getOriginalFilename(); int lastIndexOf = originalFilename.lastIndexOf("."); String suffix = originalFilename.substring(lastIndexOf); file=File.createTempFile(filename, suffix); multipartFile.transferTo(file); file.deleteOnExit(); FilePart filePart = new FilePart(multipartFileName,file);//文件参数 Part[] parts ={filePart}; MultipartRequestEntity mre=new MultipartRequestEntity(parts ,method.getParams()); //封装了普通字段和文件字段 method.setRequestEntity(mre); } result = client.executeMethod(method); response = method.getResponseBodyAsString(); response= responseHandler(result,method); //NOSONAR } catch (Exception e) { e.printStackTrace(); logger.info("post data to 3th fail ,try to post again."); try { result = client.executeMethod(method); response= responseHandler(result,method); //NOSONAR // response = method.getResponseBodyAsString(); } catch (Exception e2) { logger.info("post data to 3th second tine fail ,try to post again."); try { result = client.executeMethod(method); response= responseHandler(result,method); //NOSONAR // response = method.getResponseBodyAsString(); } catch (Exception e3) { e3.printStackTrace(); MDC.put("concectException", e3.toString()); logger.info("post data to 3th third tine fail ."); } } } finally { method.releaseConnection(); } logger.info("end the PostMethodFile method"); return response; } private static String responseHandler(int result, PostMethod method) throws IOException { if (result == HttpStatus.SC_OK) { InputStream in = method.getResponseBodyAsStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = in.read(buffer)) != -1) { baos.write(buffer, 0, len); } return URLDecoder.decode(baos.toString(), "UTF-8"); } else { return null; } } /** * transfer InputStream to a File * @param ins * @param file */ public static void inputStreamToFile(InputStream ins,File file) { try { OutputStream os = new FileOutputStream(file); int bytesRead = 0; byte[] buffer = new byte[8192]; while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) { os.write(buffer, 0, bytesRead); } os.close(); ins.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 2018-08-24 Sea add * @param key * @param value * @return */ public static Header getBasicAuthorizationHeader(String key, String value) { Header header = new Header(); logger.info("header key is :{} ", key); header.setName("Authorization"); header.setValue("Basic " + Base64.getEncoder().encodeToString((key + ":" + value).getBytes())); return header; } }
post 带文件上传 (表单提交)
/** * <dependency> * <groupId>commons-httpclient</groupId> * <artifactId>commons-httpclient</artifactId> * <version>3.1</version> * </dependency> * @param url * @param formData * @Author Sea * @return */ public String postFormData(String url,Map<String,Object> formData) { HttpClient client = new HttpClient(); PostMethod post = new PostMethod(url); try{ List<Part> formArgsList = new ArrayList<>(); for (Map.Entry<String, Object> kv :formData.entrySet()) { String key = kv.getKey(); Object value = kv.getValue(); if(value instanceof File){ FilePart fp = new FilePart(key, (File) value); fp.setCharSet("utf-8"); formArgsList.add(fp); }else { formArgsList.add(new StringPart(key, value+"", "UTF-8")); } } Part[] parts = formArgsList.toArray(new Part[formArgsList.size()]); MultipartRequestEntity entity = new MultipartRequestEntity(parts, new HttpMethodParams()); post.setRequestEntity(entity); client.executeMethod(post); //释放连接,以免超过服务器负荷 String responseBodyAsString = post.getResponseBodyAsString(); return responseBodyAsString; } catch (Exception e) { e.printStackTrace(); }finally { //释放连接,以免超过服务器负荷 post.releaseConnection(); } return null; }
/** * @Desc POST方式 传带文件的调用 * @return * @throws Exception */ public static String postFileMethod(String url,Map<String,String> params,String multipartFileName,MultipartFile multipartFile,Header header){ HttpClient client = new HttpClient(); PostMethod method = new PostMethod(url); method.addRequestHeader(header); String response= null; int result=0; try { File file = null; FilePart filePart =null; if(multipartFile!=null) { //transfer MultipartFile to file String filename = multipartFile.getName(); String originalFilename = multipartFile.getOriginalFilename(); int lastIndexOf = originalFilename.lastIndexOf("."); String suffix = originalFilename.substring(lastIndexOf); file=File.createTempFile(filename, suffix); multipartFile.transferTo(file); file.deleteOnExit(); filePart = new FilePart(multipartFileName,file);//文件参数 } //set params ArrayList<StringPart> paramList = new ArrayList<>(); if(params.size()>0){ for (Map.Entry<String, String> entry : params.entrySet()) { StringPart param = new StringPart(entry.getKey(), entry.getValue()); //普通参数 paramList.add(param); } } int size = paramList.size(); Part[] parts =null; //if filePart is not null if(filePart!=null){ parts =new Part[size+1]; for(int i=0;i<size;i++){ parts[i]=paramList.get(i); } parts[size]=filePart; }else { parts =new Part[size]; for(int i=0;i<size;i++){ parts[i]=paramList.get(i); } } MultipartRequestEntity mre=new MultipartRequestEntity(parts ,method.getParams()); //封装了普通字段和文件字段 method.setRequestEntity(mre ); result = client.executeMethod(method); response = method.getResponseBodyAsString(); // response= responseHandler(result,method); //NOSONAR } catch (Exception e) { e.printStackTrace(); logger.info("post data to 3th fail ,try to post again."); try { result = client.executeMethod(method); // response= responseHandler(result,method); //NOSONAR response = method.getResponseBodyAsString(); } catch (Exception e2) { logger.info("post data to 3th second tine fail ,try to post again."); try { result = client.executeMethod(method); // response= responseHandler(result,method); //NOSONAR response = method.getResponseBodyAsString(); } catch (Exception e3) { e3.printStackTrace(); MDC.put("concectException", e3.toString()); logger.info("post data to 3th third tine fail ."); } } } finally { method.releaseConnection(); } logger.info("end the PostMethodFile method"); return response; }
1.
package com.icil.esolution.utils; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.URL; import java.util.Base64; import java.util.Map; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLSession; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.methods.ByteArrayRequestEntity; import org.apache.commons.httpclient.methods.DeleteMethod; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.RequestEntity; import org.apache.commons.httpclient.params.HttpMethodParams; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; public class URLHttpUtils { private static final Logger logger = LoggerFactory.getLogger(URLHttpUtils.class); public static synchronized String HttpClientRequest(String message, Header header, String operation, String url) { RequestEntity entity = null; String response = null; PostMethod postMethod = null; try { logger.info("Enter into HttpClientRequest method "); entity = new ByteArrayRequestEntity(message.getBytes("UTF-8")); HttpClient httpClient = new HttpClient(); postMethod = new PostMethod(url + operation); postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8"); if (header != null) { postMethod.setRequestHeader(header); } postMethod.setRequestEntity(entity); httpClient.executeMethod(postMethod); response = postMethod.getResponseBodyAsString(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { postMethod.releaseConnection(); } logger.info("complete of the HttpClientRequest method"); return response; } /** * 2018-08-26 sea add 3 try * @param jsonMessage * @param targetUrl * @param header * @return */ public static synchronized String HttpClientPostRequest(String jsonMessage, String targetUrl, Header header) { logger.info("debug the json message " + jsonMessage); logger.info("debug targetUrl " + targetUrl); RequestEntity entity = null; String response = null; PostMethod postMethod = null; HttpClient httpClient = new HttpClient(); try { logger.info("Enter into HttpClientRequest method "); entity = new ByteArrayRequestEntity(jsonMessage.getBytes("UTF-8")); postMethod = new PostMethod(targetUrl); postMethod.addRequestHeader("Content-Type", "application/json"); postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8"); if (header != null) { postMethod.setRequestHeader(header); } postMethod.setRequestEntity(entity); httpClient.executeMethod(postMethod); response = postMethod.getResponseBodyAsString(); } catch (Exception e) { logger.info("connect fail ,try to connect again!"); e.printStackTrace(); try { httpClient.executeMethod(postMethod); response = postMethod.getResponseBodyAsString(); } catch (Exception e2) { logger.info("connect second fail ,try to third time connect !"); e2.printStackTrace(); try { httpClient.executeMethod(postMethod); response = postMethod.getResponseBodyAsString(); } catch (Exception e3) { logger.info("third time connect fail !"); e3.printStackTrace(); MDC.put("concectException", e3.toString()); } } } finally { postMethod.releaseConnection(); } logger.info("Complete of the HttpClientRequest method"); return response; } /** * @param url , postData @return String @throws */ public static synchronized String postURLRequest(String url, String postData) { logger.debug("Enter into postURLRequest method ."); StringBuffer buffer = new StringBuffer(); try { /* * here skip the https certificate verify, or should install cert into JDK * .currently skip the validate for certificate. * URLHttpUtils.httpsSkipCertificates(); */ trustAllHttpsCertificates(); HttpsURLConnection.setDefaultHostnameVerifier(hv); URL obj = new URL(url); HttpsURLConnection conn = (HttpsURLConnection) obj.openConnection(); conn.setRequestMethod("POST"); // USPS web service require to set this content-type. conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // open the key that can send the data to webservice. conn.setDoOutput(true); // open the key that can receive the data from webservice. conn.setDoInput(true); DataOutputStream wr = new DataOutputStream(conn.getOutputStream()); wr.writeBytes(postData); wr.flush(); wr.close(); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); String line = ""; while ((line = reader.readLine()) != null) { buffer.append(line); } reader.close(); } catch (Exception e) { e.printStackTrace(); } logger.debug("The response content is : {}", buffer.toString()); logger.debug("Complete in postURLRequest method ."); return buffer.toString(); } /** * @param url , postData @return String @throws */ public static synchronized String deleteURLRequest(String targetUrl, Map<String, String> map) { logger.info("Enter into getURLRequest method "); logger.info("debug targetUrl " + targetUrl); String response = null; DeleteMethod deleteMethod = null; try { HttpClient httpClient = new HttpClient(); deleteMethod = new DeleteMethod(targetUrl); deleteMethod.addRequestHeader(map.get("apiKey"), map.get("apiValue")); httpClient.executeMethod(deleteMethod); response = deleteMethod.getResponseBodyAsString(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { deleteMethod.releaseConnection(); } logger.info("Complete of the getURLRequest method"); return response; } /** * @param url , postData @return String @throws */ public static synchronized String getURLRequest(String targetUrl, Map<String, String> map) { logger.info("Enter into getURLRequest method "); logger.info("debug targetUrl " + targetUrl); String response = null; GetMethod getMethod = null; try { HttpClient httpClient = new HttpClient(); getMethod = new GetMethod(targetUrl); getMethod.addRequestHeader(map.get("apiKey"), map.get("apiValue")); httpClient.executeMethod(getMethod); response = getMethod.getResponseBodyAsString(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { getMethod.releaseConnection(); } logger.info("Complete of the getURLRequest method"); return response; } /** * sea add 2 try again 2018-08-24 * * @param targetUrl * @param header * @return */ public static synchronized String getURLRequest(String targetUrl, Header header) { logger.info("Enter into getURLRequest method "); logger.info("debug targetUrl is {}", targetUrl); String response = null; GetMethod getMethod = null; HttpClient httpClient = new HttpClient(); getMethod = new GetMethod(targetUrl); if (header != null) { getMethod.addRequestHeader(header); } try { httpClient.executeMethod(getMethod); response = getMethod.getResponseBodyAsString(); } catch (Exception e) { logger.info("get connect fail, try to second connect"); e.printStackTrace(); try { httpClient.executeMethod(getMethod); response = getMethod.getResponseBodyAsString(); } catch (Exception e1) { logger.info("get connect fail, try to third time connect"); e1.printStackTrace(); try { httpClient.executeMethod(getMethod); response = getMethod.getResponseBodyAsString(); } catch (Exception e2) { logger.info("It have third time connect but still connect fail,and exception is {}", e2); MDC.put("concectException", e2.toString()); e2.printStackTrace(); } } } finally { getMethod.releaseConnection(); } logger.info("Complete of the getURLRequest method"); return response; } /** * @param url , postData @return String @throws */ public static synchronized String postURLRequest2(String jsonMessage, String targetUrl, Map<String, String> map) { logger.info("Enter into postURLRequest2 method "); logger.info("debug the json message " + jsonMessage); logger.info("debug targetUrl " + targetUrl); RequestEntity entity = null; String response = null; PostMethod postMethod = null; try { entity = new ByteArrayRequestEntity(jsonMessage.getBytes("UTF-8")); HttpClient httpClient = new HttpClient(); postMethod = new PostMethod(targetUrl); postMethod.addRequestHeader("Content-Type", "application/json"); postMethod.addRequestHeader(map.get("apiKey"), map.get("apiValue")); postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8"); postMethod.setRequestEntity(entity); httpClient.executeMethod(postMethod); response = postMethod.getResponseBodyAsString(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { postMethod.releaseConnection(); } logger.info("Complete of the HttpClientRequest method"); return response; } // 2016-10-03, wrightdeng,#3257 add skip https verify function here. static HostnameVerifier hv = new HostnameVerifier() { public boolean verify(String urlHostName, SSLSession session) { System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost()); return true; } }; private static synchronized void trustAllHttpsCertificates() throws Exception { javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1]; javax.net.ssl.TrustManager tm = new miTM(); trustAllCerts[0] = tm; javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, null); javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); } static class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public boolean isServerTrusted(java.security.cert.X509Certificate[] certs) { return true; } public boolean isClientTrusted(java.security.cert.X509Certificate[] certs) { return true; } public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException { return; } public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException { return; } } /** * 2018-08-24 Sea add * * @param key * @param value * @return */ public static Header getBasicAuthorizationHeader(String key, String value) { Header header = new Header(); logger.info("header key is :{} ", key); header.setName("Authorization"); header.setValue("Basic " + Base64.getEncoder().encodeToString((key + ":" + value).getBytes())); return header; } }
2.不推荐2
package com.icil.edi.ws.printService.utils; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.URL; import java.util.Map; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLSession; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.methods.ByteArrayRequestEntity; import org.apache.commons.httpclient.methods.DeleteMethod; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.RequestEntity; import org.apache.commons.httpclient.params.HttpMethodParams; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class URLHttpUtils { private static final Logger logger = LoggerFactory.getLogger(URLHttpUtils.class); /* * public static void httpsSkipCertificates() { * * try { trustAllHttpsCertificates(); } catch (Exception e) { // TODO * Auto-generated catch block e.printStackTrace(); } * * } */ public synchronized static String HttpClientRequest(String message, Header header, String operation, String url) { RequestEntity entity = null; String response = null; PostMethod postMethod = null; try { logger.info("Enter into HttpClientRequest method "); entity = new ByteArrayRequestEntity(message.getBytes("UTF-8")); HttpClient httpClient = new HttpClient(); postMethod = new PostMethod(url + operation); postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8"); if (header != null) { postMethod.setRequestHeader(header); } postMethod.setRequestEntity(entity); httpClient.executeMethod(postMethod); response = postMethod.getResponseBodyAsString(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (HttpException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { postMethod.releaseConnection(); } logger.info("Complete of the HttpClientRequest method"); return response; } public synchronized static String HttpClientRequest(String jsonMessage, String targetUrl, Header header) { logger.info("debug the json message " + jsonMessage); logger.info("debug targetUrl " + targetUrl); // logger.info("debug the "+header.getName()+" ----- "+header.getValue()); RequestEntity entity = null; String response = null; PostMethod postMethod = null; try { logger.info("Enter into HttpClientRequest method "); entity = new ByteArrayRequestEntity(jsonMessage.getBytes("UTF-8")); HttpClient httpClient = new HttpClient(); postMethod = new PostMethod(targetUrl); postMethod.addRequestHeader("Content-Type", "application/json"); postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8"); if (header != null) { postMethod.setRequestHeader(header); } postMethod.setRequestEntity(entity); httpClient.executeMethod(postMethod); response = postMethod.getResponseBodyAsString(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (HttpException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { postMethod.releaseConnection(); } logger.info("Complete of the HttpClientRequest method"); return response; /* * Client client = ClientBuilder.newClient(); Entity payload = * Entity.json(jsonMessage); Response response = client.target(targetUrl). * request(MediaType.APPLICATION_JSON_TYPE). header(header.getName(), * header.getValue()).post(payload); return response.getEntity().toString() ; */ } /** * @param url , postData @return String @throws */ public synchronized static String postURLRequest(String url, String postData) { logger.debug("Enter into postURLRequest method ."); StringBuffer buffer = new StringBuffer(); try { // here skip the https certificate verify, or should install cert into JDK // .currently skip the // validate for certificate. // URLHttpUtils.httpsSkipCertificates(); trustAllHttpsCertificates(); HttpsURLConnection.setDefaultHostnameVerifier(hv); URL obj = new URL(url); HttpsURLConnection conn = (HttpsURLConnection) obj.openConnection(); conn.setRequestMethod("POST"); // USPS web service require to set this content-type. conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // open the key that can send the data to webservice. conn.setDoOutput(true); // open the key that can receive the data from webservice. conn.setDoInput(true); DataOutputStream wr = new DataOutputStream(conn.getOutputStream()); wr.writeBytes(postData); wr.flush(); wr.close(); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); String line = ""; while ((line = reader.readLine()) != null) { buffer.append(line); } reader.close(); } catch (Exception e) { e.printStackTrace(); } logger.debug("The response content : " + buffer.toString()); logger.debug("Complete in postURLRequest method ."); return buffer.toString(); } /** * @param url , postData @return String @throws */ public synchronized static String deleteURLRequest(String targetUrl, Map<String, String> map) { logger.info("Enter into getURLRequest method "); logger.info("debug targetUrl " + targetUrl); // logger.info("debug the "+header.getName()+" ----- "+header.getValue()); RequestEntity entity = null; String response = null; DeleteMethod deleteMethod = null; try { HttpClient httpClient = new HttpClient(); deleteMethod = new DeleteMethod(targetUrl); deleteMethod.addRequestHeader(map.get("apiKey"), map.get("apiValue")); httpClient.executeMethod(deleteMethod); response = deleteMethod.getResponseBodyAsString(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (HttpException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { deleteMethod.releaseConnection(); } logger.info("Complete of the getURLRequest method"); return response; } /** * @param url , postData @return String @throws */ public synchronized static String getURLRequest(String targetUrl, Map<String, String> map) { logger.info("Enter into getURLRequest method "); logger.info("debug targetUrl " + targetUrl); // logger.info("debug the "+header.getName()+" ----- "+header.getValue()); RequestEntity entity = null; String response = null; GetMethod getMethod = null; try { HttpClient httpClient = new HttpClient(); getMethod = new GetMethod(targetUrl); getMethod.addRequestHeader(map.get("apiKey"), map.get("apiValue")); httpClient.executeMethod(getMethod); response = getMethod.getResponseBodyAsString(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (HttpException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { getMethod.releaseConnection(); } logger.info("Complete of the getURLRequest method"); return response; } /** * @param url , postData @return String @throws */ public synchronized static String postURLRequest2(String jsonMessage, String targetUrl, Map<String, String> map) { logger.info("Enter into postURLRequest2 method "); logger.info("debug the json message " + jsonMessage); logger.info("debug targetUrl " + targetUrl); // logger.info("debug the "+header.getName()+" ----- "+header.getValue()); RequestEntity entity = null; String response = null; PostMethod postMethod = null; try { entity = new ByteArrayRequestEntity(jsonMessage.getBytes("UTF-8")); HttpClient httpClient = new HttpClient(); postMethod = new PostMethod(targetUrl); postMethod.addRequestHeader("Content-Type", "application/json"); postMethod.addRequestHeader(map.get("apiKey"), map.get("apiValue")); postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8"); postMethod.setRequestEntity(entity); httpClient.executeMethod(postMethod); response = postMethod.getResponseBodyAsString(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (HttpException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { postMethod.releaseConnection(); } logger.info("Complete of the HttpClientRequest method"); return response; } // 2016-10-03, wrightdeng,#3257 add skip https verify function here. static HostnameVerifier hv = new HostnameVerifier() { public boolean verify(String urlHostName, SSLSession session) { System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost()); // TODO Auto-generated method stub return true; } }; private synchronized static void trustAllHttpsCertificates() throws Exception { javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1]; javax.net.ssl.TrustManager tm = new miTM(); trustAllCerts[0] = tm; javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, null); javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); } static class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public boolean isServerTrusted(java.security.cert.X509Certificate[] certs) { return true; } public boolean isClientTrusted(java.security.cert.X509Certificate[] certs) { return true; } public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException { return; } public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException { return; } } }
eg:
//get 的使用 String response = URLHttpUtils.getURLRequest(url, null); post ;的使用 String apiToken = PropertiesUtils.getConfigInfo(EdiServiceConstant.SECURITY_KEY, EdiServiceConstant.AIR21KEY); String userToken = PropertiesUtils.getConfigInfo(EdiServiceConstant.SECURITY_KEY, EdiServiceConstant.AIR21VALUE); // Assemble Authentication Header Header header = accountServiceFactory.getBasicAuthorizationHeader(apiToken, userToken); //////////////////// public Header getBasicAuthorizationHeader(String key,String value) { Header header = new Header(); LOGGER.info("header key is :{}",key); header.setName(PrintConstant.Authorization); header.setValue("Basic "+Base64.getEncoder().encodeToString((key+":"+value).getBytes())); return header; } ////////////////// response = URLHttpUtils.HttpClientRequest(requestData, air21Url, header);
post 带文件上传
一、PostMethod一般请求 /** * POST方式 * @return * @throws Exception */ public static String PostMethodTest() throws Exception{ System.out.println("开始"); HttpClient client = new HttpClient(); PostMethod method = new PostMethod(URI); try{ method.addRequestHeader(new Header("Content-Type", "application/x-www-form-urlencoded;charset=utf-8") ); // method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); method.addParameter(new NameValuePair("appid", "XXXX") ); method.addParameter(new NameValuePair("appkey", "XXXX") ); // method.addParameter("appid", "XXXX"); // method.addParameter("appkey", "XXXX"); int result = client.executeMethod(method); if (result == HttpStatus.SC_OK) { InputStream in = method.getResponseBodyAsStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = in.read(buffer)) != -1) { baos.write(buffer, 0, len); } return URLDecoder.decode(baos.toString(), "UTF-8"); } else { throw new Exception("HTTP ERROR Status: " + method.getStatusCode() + ":" + method.getStatusText()); } }finally { method.releaseConnection(); } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 二、PostMethod带文件方式 /** * POST方式 传带文件的调用 * @return * @throws Exception */ public static String PostMethodFileTest() throws Exception{ System.out.println("开始"); HttpClient client = new HttpClient(); PostMethod method = new PostMethod(URI); try{ FilePart filePart = new FilePart("file",new File("D:\\8\\5972-41-2017-06-07-1440-16406.wav"));//文件参数 StringPart questionId = new StringPart("questionId","10001");//普通参数 StringPart userId = new StringPart("userId","765709");//普通参数 StringPart homeworkId = new StringPart("homeworkId","950");//普通参数 Part[] parts ={filePart,questionId,userId,homeworkId}; MultipartRequestEntity mre=new MultipartRequestEntity(parts ,method.getParams()); //封装了普通字段和文件字段 method.setRequestEntity(mre ); int result = client.executeMethod(method); if (result == HttpStatus.SC_OK) { InputStream in = method.getResponseBodyAsStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = in.read(buffer)) != -1) { baos.write(buffer, 0, len); } return URLDecoder.decode(baos.toString(), "UTF-8"); } else { throw new Exception("HTTP ERROR Status: " + method.getStatusCode() + ":" + method.getStatusText()); } }finally { method.releaseConnection(); } }
解析response:
import org.json.JSONObject;
import org.json.XML;
jsonObject = XML.toJSONObject(response);