https 连接


public static Element request(HashMap<String, String> requestMap,
			IVenderConfig config, String functionCode) throws Exception {
		URL url = null;
		URLConnection connection = null;
		BufferedReader reader = null;
		BufferedWriter writer = null;
		try {
			url = new URL(config.getVenderRequestUrl() + functionCode);

			connection = url.openConnection();
			connection.setConnectTimeout(5000);
			connection.setReadTimeout(20000);
			connection.setDoInput(true);
			connection.setDoOutput(true);
			if (connection instanceof HttpsURLConnectionImpl) {

				HttpsURLConnection https = (HttpsURLConnection) connection;
				https.setHostnameVerifier(new MyVerified());

				X509TrustManager xtm = new MyTrustManager();
				TrustManager mytm[] = { xtm };
				SSLContext ctx = SSLContext.getInstance("SSL");
				ctx.init(null, mytm, null);
				SSLSocketFactory sf = ctx.getSocketFactory();
				https.setSSLSocketFactory(sf);

			}
			connection.connect();

			writer = new BufferedWriter(new OutputStreamWriter(connection
					.getOutputStream(), "UTF-8"));
			String writeString = CoreHttpUtils.getQueryString(requestMap);

			 			writer.write(writeString);
			writer.flush();
			writer.close();

			Map<String, List<String>> headers = connection.getHeaderFields();
			if (headers.size() > 0) {
				String response = headers.get(null).toString();
				if (response.indexOf("200 OK") < 0) {
					throw new Exception("读取地址:" + url + " 错误:" + response);
				}
			}

			reader = new BufferedReader(new InputStreamReader(connection
					.getInputStream(), "UTF-8"));

			StringBuffer sb = new StringBuffer();

			String temp = null;
			while ((temp = reader.readLine()) != null) {
				sb.append(temp);
			}
			 			
			String  responseStr = sb.toString();
			String[] responseStrArray = responseStr.split("[" + GROUP + "]");
			
			String merchantId = responseStrArray[0];
			String errorCode = responseStrArray[1];			
			String mac = responseStrArray[2];					
			String busiData = responseStrArray[3];		
			
			String verifyMac = CoreStringUtils.md5(busiData + config.getVenderSignKey(), CharsetConstant.CHARSET_GBK);

			// 验证成功
			if (verifyMac.equals(mac)) {
				
				if("0000".equals(errorCode)){
					SAXBuilder builder = new SAXBuilder();
					Document doc = null;
					Reader in = new StringReader(busiData);
					doc = builder.build(in);
					Element root = doc.getRootElement();
					return root;				
				}else{
					logger.error("merchantId={}, errorCode={}, key={}, requestData={}, responseData={}",
							new Object[]{merchantId, errorCode, config.getVenderSignKey(),writeString, busiData});			
				}

			} else {
				logger.error("本地计算的校验码={}", verifyMac);
				logger.error("merchantId={}, errorCode={}, key={}, requestData={}, responseData={}",
						new Object[]{merchantId, errorCode, config.getVenderSignKey(), writeString, busiData});
				logger.error("服务器返回的校验码={}", mac);
			}
			return null;
		} catch (SocketTimeoutException e) {
			// 抛出超时导致的异常
			logger.error("网络连接超时", e);
			throw e;
		} catch (Exception e) {
			//判断是否为502或504异常,如果为此类异常不做处理,直接抛出异常
			if (e.getMessage().indexOf(ApiConstant.HTTP_ERROR_CODE_502) != -1){
				logger.error("网络连接异常,网关或代理服务器时收到了无效响应", e);
				throw e;
			}else if (e.getMessage().indexOf(ApiConstant.HTTP_ERROR_CODE_504) != -1){
				logger.error("网络连接网关超时", e);
				throw e;
			}else {
				logger.error("向广东博众发送请求出错", e);
				return null;
			}
		}
	}

你可能感兴趣的:(https)