gistfile1.txt import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamR
import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.security.SecureRandom; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.KeyManager; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import javax.xml.parsers.DocumentBuilderFactory; import com.fasterxml.jackson.core.type.TypeReference; import com.meallink.core.exception.api.HttpClientException; import com.meallink.core.json.JsonObjectMapper; /** * http\https请求辅助工具类 * */ public class HttpObjectRequestClient { private static final String _boundary = "--------httppost"; private JsonObjectMapper objectMapper; private String token; private Class responseClass; private TypeReference responseReference; private Class errorClass; private String responseFileName; public HttpObjectRequestClient() { objectMapper = new JsonObjectMapper(); } public String getToken() { return token; } public void setToken(String token) { this.token = token; } public String getResponseFileName() { return responseFileName; } public void setResponseFileName(String responseFileName) { this.responseFileName = responseFileName; } public Class getResponseClass() { return responseClass; } public void setResponseClass(Class responseClass) { this.responseClass = responseClass; } public TypeReference getResponseReference() { return responseReference; } public void setResponseReference(TypeReference responseReference) { this.responseReference = responseReference; } public Class getErrorClass() { return errorClass; } public void setErrorClass(Class errorClass) { this.errorClass = errorClass; } public Object execute(String uri, String method, Object requestData) throws HttpClientException { Object responseData = null; boolean multipartContent = requestData instanceof File; HttpURLConnection connection = null; try { if (uri.startsWith("https")) { SSLContext ctx = SSLContext.getInstance("TLS"); ctx.init(new KeyManager[0], new TrustManager[] { new DefaultTrustManager() }, new SecureRandom()); SSLContext.setDefault(ctx); } connection = (HttpURLConnection) new URL(uri).openConnection(); connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); connection.setConnectTimeout(10000); connection.setRequestMethod(method); if (multipartContent) { connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + _boundary); } else if (requestData != null) { connection.setRequestProperty("Content-Type", "application/json"); } else { connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); } if (token != null) { int sep = token.indexOf('='); connection.setRequestProperty(token.substring(0, sep), token.substring(sep + 1)); } connection.setRequestProperty("Accept", "*/*"); connection.connect(); if (multipartContent) { DataOutputStream outputStream = new DataOutputStream( connection.getOutputStream()); writeFile(outputStream, (File) requestData); outputStream.writeBytes("--" + _boundary + "--" + "\r\n"); outputStream.writeBytes("\r\n"); } else if (requestData != null) { String paramterString = objectMapper .writeValueAsString(requestData); connection.getOutputStream().write( paramterString.getBytes("utf-8")); } if (connection.getResponseCode() < 400) { InputStream inputStream = connection.getInputStream(); if (responseClass == File.class) { FileOutputStream outputStream = new FileOutputStream( responseFileName); writeOutputStream(outputStream, inputStream); outputStream.close(); } else if (responseClass == org.w3c.dom.Document.class) { DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory .newInstance(); responseData = documentBuilderFactory.newDocumentBuilder() .parse(inputStream); } else { if (responseReference != null) { responseData = objectMapper.readValue(inputStream, responseReference); } else { responseData = objectMapper.readValue(inputStream, responseClass); } } } else { InputStream inputStream = connection.getErrorStream(); if (inputStream == null) { inputStream = connection.getInputStream(); } if (connection.getResponseCode() < 500) { responseData = objectMapper.readValue(inputStream, errorClass); } else { BufferedReader reader = new java.io.BufferedReader( new InputStreamReader(inputStream)); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } } connection.disconnect(); } catch (Exception e) { throw new HttpClientException(e); } return responseData; } private void writeOutputStream(OutputStream outputStream, InputStream inputStream) { try { byte[] buffer = new byte[1024]; int count; while ((count = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, count); } } catch (IOException e) { e.printStackTrace(); } } private void writeFile(DataOutputStream outputStream, File file) { FileInputStream inputStream = null; try { inputStream = new FileInputStream(file); outputStream.writeBytes("--" + _boundary + "\r\n"); outputStream.writeBytes("Content-Disposition: form-data; name=\"" + "abc\"; filename=\"" + URLEncoder.encode(file.getName(), "UTF-8") + "\"\r\n"); outputStream.writeBytes("Content-Type: " + getContentType(file) + "\r\n"); outputStream.writeBytes("\r\n"); byte[] buffer = new byte[1024]; int count; while ((count = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, count); } outputStream.writeBytes("\r\n"); } catch (IOException e) { e.printStackTrace(); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } private String getFileExtension(File file) { String name = file.getName(); int index = name.lastIndexOf('.'); return (index != -1) ? name.substring(index) : ""; } private String getContentType(File file) { String fileExtension = getFileExtension(file); if (fileExtension.equals(".png") || fileExtension.equals(".jpg")) { return "image/" + fileExtension.substring(1); } return "application/octet-stream"; } private static class DefaultTrustManager implements X509TrustManager { public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { } public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return null; } } }