httpclient
package test; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.URL; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import org.apache.commons.codec.digest.DigestUtils; public class HttpClientApache { private HttpsURLConnection getHttpsConn() { try { URL url = new URL("请求地址"); HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); SSLContext sc; sc = SSLContext.getInstance("SSL"); sc.init(null, new TrustManager[] { new MyTrustManager() },new SecureRandom()); conn.setSSLSocketFactory(sc.getSocketFactory()); return conn; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } /** * write */ public void write() { HttpsURLConnection conn = getHttpsConn(); DataOutputStream out = null; try { conn.setConnectTimeout(120 * 1000); conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestMethod("POST"); conn.setUseCaches(false); conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); conn.connect(); String filenameToSend = "报文.xml"; File f = new File(filenameToSend); byte data[] = new byte[(int) f.length()]; FileInputStream fis = new FileInputStream(filenameToSend); fis.read(data); fis.close(); String xmlStr = new String(data); // 获取xml报文data节点下的所有值 String dataStr = getNodeValue(xmlStr, "bizdata", "data"); System.out.println("dataStr:" + dataStr);
//采用sha1加密 String sign = DigestUtils.sha1Hex(dataStr+秘钥); System.out.println("sign:" + sign); // 设置加签sign到xml报文中 String returnXml = getSignXMLString(xmlStr, sign); System.out.println("returnXml:" + returnXml); data = returnXml.getBytes(); out = new DataOutputStream(conn.getOutputStream()); out.write(org.apache.commons.codec.binary.Base64.encodeBase64(data)); out.flush(); out.close(); System.out.println(conn.getResponseCode() + ">>"+ conn.getResponseMessage()); byte[] bytes = StreamUtil.toByteArray(conn.getInputStream()); if (bytes == null || bytes.length == 0) { System.out.println("time out"); } else { // 返回 String ret = new String( org.apache.commons.codec.binary.Base64.decodeBase64(bytes),"GBK"); String code = XmlUtil.getNodeValue(ret, "code"); System.out.println("------------------:" + code); System.out.println(ret); } conn.disconnect(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { HttpClientApache a = new HttpClientApache(); for (int i = 0; i < 1; i++) { a.write(); } System.exit(0); } public static String getNodeValue(String xmlString, String... names) { if ((names == null) || (names.length == 0)) { return null; } String nodeValue = xmlString; for (String name : names) { nodeValue = getNodeValue(nodeValue, name); if (nodeValue == null) { return null; } } return nodeValue; } public static String getNodeValue(String xmlString, String name) { if (xmlString == null) { return null; } int startPos = xmlString.indexOf("<" + name + ">"); if (startPos == -1) { return null; } int endPos = xmlString.lastIndexOf("</" + name + ">"); if (endPos == -1) { return null; } return xmlString.substring(startPos + ("</" + name + ">").length() - 1,endPos); } public static String getSignXMLString(String xmlString,String sign) { String StrVal = ""; if (xmlString != null && !"".equals(xmlString)) { boolean isExistStr = xmlString.contains("<sign>"); int a = xmlString.lastIndexOf("<value>"); int b = xmlString.lastIndexOf("</value>"); String requestXML = ""; String requestXMLStr=""; requestXML = xmlString.substring(0, b); requestXMLStr = xmlString.substring(b, xmlString.length()); if (isExistStr) { StrVal = requestXML+sign+requestXMLStr; } else { StrVal = requestXML; } } return StrVal.trim(); } }
package test; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.X509TrustManager; public class MyTrustManager implements X509TrustManager{ @Override public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { // TODO Auto-generated method stub } @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; } }