`

https 连接

    博客分类:
  • http
 
阅读更多

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连接的前几毫秒发生了什么?

    最后,客户端和服务器交换确认消息,确认他们都理解并接受协商的参数,至此握手完成,双方开始使用对话密钥进行AES等对称加密算法进行数据交换,实现安全的HTTPS连接。 在整个过程中,Wireshark这样的网络嗅探工具...

    浏览器网络帐号登录看完整的HTTPS连接

    本文将从浏览器网络账号登录的角度出发,详细介绍HTTPS连接的建立过程,包括TCP三次握手、SSL握手过程、SSL数据加密解密流程、数字证书验证机制等关键技术点。 #### 二、TCP三次握手 TCP三次握手是建立一个TCP连接...

    swift-AFNetworking实现HTTPS连接

    本篇文章将详细探讨如何使用AFNetworking在Swift项目中实现HTTPS连接。 首先,我们需要了解HTTPS的基础知识。HTTPS(HyperText Transfer Protocol Secure)是一种基于SSL/TLS安全协议的HTTP协议,用于加密数据传输...

    C#/.NET HttpHelper源码,基于苏飞开发助手二次开发,修复HTTPS连接相关问题

    这个特定的"C#/.NET HttpHelper"源码是针对苏飞开发助手的二次开发版本,旨在优化和增强HTTP请求处理,特别是解决了HTTPS连接的相关问题。在本文中,我们将深入探讨HttpHelper的用途、功能以及它如何解决HTTPS连接...

    httpolyglot, 通过 node.js 在同一端口上提供http和https连接.zip

    httpolyglot, 通过 node.js 在同一端口上提供http和https连接 描述用于在同一端口上提供http和https连接的模块。要求node.js -- v0.10.0或者更高版本安装npm install httpolyglot示例简单用法:var httpoly

    在tomcat中实现https安全连接的方法

    可以通过访问`https://localhost:8443`来测试HTTPS连接是否成功建立。 #### 三、总结 通过上述步骤,我们可以在Tomcat中成功实现HTTPS安全连接。HTTPS不仅可以加密数据传输,还能够通过证书验证服务器的真实性,...

    VC连接https_ssl

    4. `SSLConnection.cpp`和`SSLConnection.h`:这两个文件很可能定义了一个名为`SSLConnection`的类,这个类负责处理HTTPS连接的建立、数据传输以及断开等操作。在C++中,通常使用面向对象的方式封装复杂的网络通信...

    如何使用php判断服务器是否是HTTPS连接

    例如,某些服务器可能使用不同的环境变量来标识HTTPS连接,或者在某些情况下,即使是在HTTPS连接下,`$_SERVER['HTTPS']`也可能为空。在这些情况下,我们可能需要检查其他环境变量,比如`$_SERVER['SERVER_PORT']`。...

    HTTPS连接最初的若干毫秒

    要搞清楚SSL在HTTPS通信时究竟发生了什么,这份资料我保证时最好的,对初次接触ssl的技术员尤其适用

    Java连接实现代码 (JAVA代码和VC代码 已更正)

    综上所述,"Java连接实现代码"可能涵盖了上述多种网络连接技术,对于抓取Google数据这样的任务,可能使用了HTTP或HTTPS连接,并可能涉及到多线程和错误处理。VC代码可能与Java代码配合,例如,Java负责网络通信,而...

    使用libcurl连接https服务器

    对于HTTPS连接,你需要设置以下选项: - `CURLOPT_URL`:指定你要连接的HTTPS服务器URL。 - `CURLOPT_SSL_VERIFYPEER`:默认情况下,libcurl会验证服务器证书,你可以设置为`false`禁用此验证,但这样做会降低安全...

    各种连接

    5. **HTTPS连接**:HTTPS是在HTTP基础上添加了SSL/TLS加密,确保数据传输的安全性,涉及证书验证和加密算法。 6. **源码分析**:文章可能包含具体的编程语言实现,例如使用Python的socket库创建TCP服务器和客户端,...

    IE6.0即将重定向到不安全的连接 无法登陆的问题解决

    执行以上步骤后,IE6.0浏览器在遇到从安全的HTTPS连接到不安全的HTTP连接的重定向时,将不再显示警告,从而允许用户继续登录。但请注意,这可能会降低用户的在线安全性,因为浏览器不再对潜在的不安全连接发出警告。...

    客户端服务器连接通信

    7. **安全连接**:为了保护通信内容,通常会使用SSL/TLS协议来加密数据,形成HTTPS连接。这样,即使数据在网络中被截获,也无法读取其内容。 8. **断开连接**:通信完成后,客户端和服务器通过“四次挥手”来关闭...

    hsts-everywhere:强制Chrome在所有HTTPS连接上使用HTTP严格传输安全性

    标题“hsts-everywhere:强制Chrome在所有HTTPS连接上使用HTTP严格传输安全性”表明这是一个针对Chrome浏览器的扩展或设置,目的是使浏览器自动应用HSTS策略,无论用户访问哪个网站,只要该网站声明支持HSTS,浏览器...

    openjdk遇到的https的ssl异常解决方案

    在使用 openjdk 时,可能会遇到 HTTPS 的 SSL 异常问题,例如在使用 HTTPS 连接时出现 KeyException 异常。本文将提供两套解决方案来解决这个问题。 一、卸载 openjdk,安装 sun jdk 在 openjdk 中,可能会出现 ...

    c#使用Socket发送HTTP/HTTPS请求的实现代码

    首先,需要创建一个Socket对象,并使用Connect方法连接到目标服务器。然后,使用Send方法发送HTTP/HTTPS请求,最后使用Receive方法接收服务器的响应。 sendsRequestRetry方法 在提供的代码中,sendsRequestRetry...

    Tomcat中实现https安全连接与SSL配置

    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连接问题。 #nsacyber

    HTTP-Connectivity-Tester 是一个专门用于检测HTTP和HTTPS连接问题的工具,尤其适用于网络安全领域。这个工具的主要目的是帮助用户诊断网络中与HTTP和HTTPS协议相关的连通性问题,从而确保网络安全性和数据传输的...

Global site tag (gtag.js) - Google Analytics