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;
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值