https 连接
2021/6/10 10:21:02
本文主要是介绍https 连接,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
public static Result httpsRequest(String requestUrl, String requestheader, String requestparams,Boolean retry) throws Exception{ // logger.info("req---->:" + requestMethod + requestStr); Boolean ret = retry; HttpsURLConnection httpsConnection = null; Result result = new Result(); try { // 创建SSLContext SSLContext sslContext = SSLContext.getInstance("SSL"); TrustManager[] tm = { new TrustManager() }; // 初始化 sslContext.init(null, tm, new java.security.SecureRandom()); // 获取SSLSocketFactory对象 SSLSocketFactory ssf = sslContext.getSocketFactory(); HostnameVerifier HostnameVerifier = new HostnameVerifier() { @Override public boolean verify(String var1, SSLSession var2) { return true; } }; JSONObject jsonparam = JSON.parseObject(requestparams); Iterator<Map.Entry<String, Object>> para = jsonparam.entrySet().iterator(); StringBuffer urlparams = new StringBuffer(350); while(para.hasNext()){ Map.Entry<String, Object> entry = para.next(); urlparams.append(entry.getKey()+"="+entry.getValue()+"&"); } URL url = new URL(requestUrl+"?"+urlparams); httpsConnection = (HttpsURLConnection) url.openConnection(); httpsConnection.setDoOutput(false); httpsConnection.setDoInput(true); httpsConnection.setConnectTimeout(60000); httpsConnection.setReadTimeout(60000); httpsConnection.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); httpsConnection.setRequestProperty("Charset", "UTF-8"); JSONObject jsonheader = JSON.parseObject(requestheader); Iterator<Map.Entry<String, Object>> headers = jsonheader.entrySet().iterator(); while(headers.hasNext()){ Map.Entry<String, Object> entry = headers.next(); httpsConnection.setRequestProperty(entry.getKey(), entry.getValue().toString()); } httpsConnection.setRequestProperty("User-Agent", "Client identifier"); httpsConnection.setRequestMethod("GET"); /* * httpsConnection.setUseCaches(false); * httpsConnection.setRequestMethod(requestMethod); */ // 设置当前实例使用的SSLSoctetFactory httpsConnection.setSSLSocketFactory(ssf); httpsConnection.setHostnameVerifier(HostnameVerifier); // System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2"); httpsConnection.connect(); // 往服务器端写内容 // 读取服务器端返回的内容 InputStream inputStream = httpsConnection.getInputStream(); try{ inputStream = httpsConnection.getInputStream(); }catch (IOException e){ if(e.getMessage()!=null&&e.getMessage().contains("Server returned HTTP response code: 500 for URL")){ log.error("response from remote server error code 500!"+e.getMessage()); throw new Exception("错误码:500"+e.getMessage()); }else if(e.getMessage()!=null&&e.getMessage().contains("Address already in use: connect")){ log.error("response from remote server error:"+e.getMessage()); throw new Exception("错误:address in use"+e.getMessage()); } } if (httpsConnection.getResponseCode() != HttpURLConnection.HTTP_OK) { // logger.error("connect ezcs service failed: " + httpsConnection.getResponseCode()); JSONObject responseJson = new JSONObject(); responseJson.put("result","error:code-"+httpsConnection.getResponseCode()); result.setCode(-1); result.setData("error:code-"+httpsConnection.getResponseCode()); result.setMsg("失败"); return result; } InputStreamReader inputReader = new InputStreamReader(inputStream,"utf-8"); BufferedReader bufferReader = new BufferedReader(inputReader); StringBuffer sb = new StringBuffer(); String inputLine = null; while ((inputLine = bufferReader.readLine()) != null) { sb.append(inputLine+"\n"); } bufferReader.close(); inputReader.close(); inputStream.close(); // String response = readResponse(inputStream); // Utils.convertStreamToString(inputStream, "utf-8"); // log.debug("response from service: " + response); result.setCode(0); result.setData(sb); result.setMsg("成功"); return result; }finally {
if (httpsConnection != null) { httpsConnection.disconnect(); } }
private static String readResponse(InputStream inputStream) throws Exception { byte[] responseBytes = new byte[0]; while(true) { byte[] readedBytes = new byte[1024]; int readedCount = inputStream.read(readedBytes); if (readedCount <= 0) { StringBuilder readResponse = new StringBuilder(); BufferedReader br = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(responseBytes), StandardCharsets.UTF_8)); Throwable var17 = null; try { for(String line = br.readLine(); line != null; line = br.readLine()) { readResponse.append(line).append("\r\n"); } } catch (Throwable var13) { var17 = var13; throw var13; } finally { if (br != null) { if (var17 != null) { try { br.close(); } catch (Throwable var12) { var17.addSuppressed(var12); } } else { br.close(); } } } return readResponse.toString(); } byte[] newBytes = new byte[responseBytes.length + readedCount]; System.arraycopy(responseBytes, 0, newBytes, 0, responseBytes.length); System.arraycopy(readedBytes, 0, newBytes, responseBytes.length, readedCount); responseBytes = newBytes; } } static class TrustManager implements X509TrustManager { @Override public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { } @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[] {}; } }
这篇关于https 连接的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-06小米11i印度快充版ROM合集:极致体验,超越期待
- 2024-10-06【ROM下载】小米11i 5G 印度版系统, 疾速跃迁,定义新速度
- 2024-10-06【ROM下载】小米 11 青春活力版,青春无极限,活力全开
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求