package com.alipay.easysdk.kms.aliyun.credentials.http; import com.alipay.easysdk.kms.aliyun.credentials.exceptions.CredentialException; import com.alipay.easysdk.kms.aliyun.credentials.utils.Base64Utils; import javax.net.ssl.KeyManager; import javax.net.ssl.X509TrustManager; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Collections; import java.util.HashMap; import java.util.Map; public class HttpMessage { protected static final String CONTENT_TYPE = "Content-Type"; protected static final String CONTENT_MD5 = "Content-MD5"; protected static final String CONTENT_LENGTH = "Content-Length"; protected FormatType httpContentType = null; protected byte[] httpContent = null; protected String encoding = null; protected Map headers = new HashMap(); protected Integer connectTimeout = null; protected Integer readTimeout = null; private String url = null; private MethodType method = null; protected boolean ignoreSSLCerts = false; private KeyManager[] keyManagers = null; private X509TrustManager[] x509TrustManagers = null; public HttpMessage(String strUrl) { this.url = strUrl; } public HttpMessage() { } public FormatType getHttpContentType() { return httpContentType; } public void setHttpContentType(FormatType httpContentType) { this.httpContentType = httpContentType; } public byte[] getHttpContent() { return httpContent; } public String getHttpContentString() throws CredentialException { String stringContent = ""; if (this.httpContent != null) { try { if (this.encoding == null) { stringContent = new String(this.httpContent); } else { stringContent = new String(this.httpContent, this.encoding); } } catch (UnsupportedEncodingException e) { throw new CredentialException("UnsupportedEncoding: Can not parse response due to unsupported encoding."); } } return stringContent; } public void setHttpContent(byte[] httpContent, String encoding, FormatType format) throws NoSuchAlgorithmException { this.httpContent = httpContent; if (null == httpContent) { this.headers.remove(CONTENT_MD5); this.headers.put(CONTENT_LENGTH, "0"); this.headers.remove(CONTENT_TYPE); this.httpContentType = null; this.httpContent = null; this.encoding = null; return; } // for GET HEADER DELETE OPTION method, sdk should ignore the content if (getMethod() != null && !getMethod().hasContent()) { httpContent = new byte[0]; } this.httpContent = httpContent; this.encoding = encoding; String contentLen = String.valueOf(httpContent.length); String strMd5 = md5Sum(httpContent); this.headers.put(CONTENT_MD5, strMd5); this.headers.put(CONTENT_LENGTH, contentLen); if (null != format) { this.headers.put(CONTENT_TYPE, FormatType.mapFormatToAccept(format)); } } public static String md5Sum(byte[] buff) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] messageDigest = md.digest(buff); return Base64Utils.encode(messageDigest); } public String getEncoding() { return encoding; } public void setEncoding(String encoding) { this.encoding = encoding; } public Map getHeaders() { return Collections.unmodifiableMap(headers); } public String getHeaderValue(String name) { return this.headers.get(name); } public void putHeaderParameter(String name, String value) { if (null != name && null != value) { this.headers.put(name, value); } } public void setHeaders(Map headers) { this.headers = headers; } public Integer getConnectTimeout() { return connectTimeout; } public void setConnectTimeout(Integer connectTimeout) { this.connectTimeout = connectTimeout; } public Integer getReadTimeout() { return readTimeout; } public void setReadTimeout(Integer readTimeout) { this.readTimeout = readTimeout; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public MethodType getMethod() { return method; } public void setMethod(MethodType method) { this.method = method; } public boolean isIgnoreSSLCerts() { return ignoreSSLCerts; } public void setIgnoreSSLCerts(boolean ignoreSSLCerts) { this.ignoreSSLCerts = ignoreSSLCerts; } public KeyManager[] getKeyManagers() { return keyManagers; } public void setKeyManagers(KeyManager[] keyManagers) { this.keyManagers = keyManagers; } public X509TrustManager[] getX509TrustManagers() { return x509TrustManagers; } public void setX509TrustManagers(X509TrustManager[] x509TrustManagers) { this.x509TrustManagers = x509TrustManagers; } }