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;
}
}
}
分享到:
相关推荐
最后,客户端和服务器交换确认消息,确认他们都理解并接受协商的参数,至此握手完成,双方开始使用对话密钥进行AES等对称加密算法进行数据交换,实现安全的HTTPS连接。 在整个过程中,Wireshark这样的网络嗅探工具...
本文将从浏览器网络账号登录的角度出发,详细介绍HTTPS连接的建立过程,包括TCP三次握手、SSL握手过程、SSL数据加密解密流程、数字证书验证机制等关键技术点。 #### 二、TCP三次握手 TCP三次握手是建立一个TCP连接...
本篇文章将详细探讨如何使用AFNetworking在Swift项目中实现HTTPS连接。 首先,我们需要了解HTTPS的基础知识。HTTPS(HyperText Transfer Protocol Secure)是一种基于SSL/TLS安全协议的HTTP协议,用于加密数据传输...
这个特定的"C#/.NET HttpHelper"源码是针对苏飞开发助手的二次开发版本,旨在优化和增强HTTP请求处理,特别是解决了HTTPS连接的相关问题。在本文中,我们将深入探讨HttpHelper的用途、功能以及它如何解决HTTPS连接...
httpolyglot, 通过 node.js 在同一端口上提供http和https连接 描述用于在同一端口上提供http和https连接的模块。要求node.js -- v0.10.0或者更高版本安装npm install httpolyglot示例简单用法:var httpoly
可以通过访问`https://localhost:8443`来测试HTTPS连接是否成功建立。 #### 三、总结 通过上述步骤,我们可以在Tomcat中成功实现HTTPS安全连接。HTTPS不仅可以加密数据传输,还能够通过证书验证服务器的真实性,...
4. `SSLConnection.cpp`和`SSLConnection.h`:这两个文件很可能定义了一个名为`SSLConnection`的类,这个类负责处理HTTPS连接的建立、数据传输以及断开等操作。在C++中,通常使用面向对象的方式封装复杂的网络通信...
例如,某些服务器可能使用不同的环境变量来标识HTTPS连接,或者在某些情况下,即使是在HTTPS连接下,`$_SERVER['HTTPS']`也可能为空。在这些情况下,我们可能需要检查其他环境变量,比如`$_SERVER['SERVER_PORT']`。...
要搞清楚SSL在HTTPS通信时究竟发生了什么,这份资料我保证时最好的,对初次接触ssl的技术员尤其适用
综上所述,"Java连接实现代码"可能涵盖了上述多种网络连接技术,对于抓取Google数据这样的任务,可能使用了HTTP或HTTPS连接,并可能涉及到多线程和错误处理。VC代码可能与Java代码配合,例如,Java负责网络通信,而...
对于HTTPS连接,你需要设置以下选项: - `CURLOPT_URL`:指定你要连接的HTTPS服务器URL。 - `CURLOPT_SSL_VERIFYPEER`:默认情况下,libcurl会验证服务器证书,你可以设置为`false`禁用此验证,但这样做会降低安全...
5. **HTTPS连接**:HTTPS是在HTTP基础上添加了SSL/TLS加密,确保数据传输的安全性,涉及证书验证和加密算法。 6. **源码分析**:文章可能包含具体的编程语言实现,例如使用Python的socket库创建TCP服务器和客户端,...
执行以上步骤后,IE6.0浏览器在遇到从安全的HTTPS连接到不安全的HTTP连接的重定向时,将不再显示警告,从而允许用户继续登录。但请注意,这可能会降低用户的在线安全性,因为浏览器不再对潜在的不安全连接发出警告。...
7. **安全连接**:为了保护通信内容,通常会使用SSL/TLS协议来加密数据,形成HTTPS连接。这样,即使数据在网络中被截获,也无法读取其内容。 8. **断开连接**:通信完成后,客户端和服务器通过“四次挥手”来关闭...
标题“hsts-everywhere:强制Chrome在所有HTTPS连接上使用HTTP严格传输安全性”表明这是一个针对Chrome浏览器的扩展或设置,目的是使浏览器自动应用HSTS策略,无论用户访问哪个网站,只要该网站声明支持HSTS,浏览器...
在使用 openjdk 时,可能会遇到 HTTPS 的 SSL 异常问题,例如在使用 HTTPS 连接时出现 KeyException 异常。本文将提供两套解决方案来解决这个问题。 一、卸载 openjdk,安装 sun jdk 在 openjdk 中,可能会出现 ...
首先,需要创建一个Socket对象,并使用Connect方法连接到目标服务器。然后,使用Send方法发送HTTP/HTTPS请求,最后使用Receive方法接收服务器的响应。 sendsRequestRetry方法 在提供的代码中,sendsRequestRetry...
https ssl Tomcat中实现https安全连接与SSL配置https ssl Tomcat中实现https安全连接与SSL配置https ssl Tomcat中实现https安全连接与SSL配置https ssl Tomcat中实现https安全连接与SSL配置
HTTP-Connectivity-Tester 是一个专门用于检测HTTP和HTTPS连接问题的工具,尤其适用于网络安全领域。这个工具的主要目的是帮助用户诊断网络中与HTTP和HTTPS协议相关的连通性问题,从而确保网络安全性和数据传输的...