https 连接

Posted 泳之

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 连接的主要内容,如果未能解决你的问题,请参考以下文章

这两个代码片段有啥区别?

PHP代码-psysh调试代码片段工具

错误:E/RecyclerView:未连接适配器;跳过片段上的布局

连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段

typescript Angular 2测试片段。代码库https://developers.livechatinc.com/blog/category/programming/angular-2/

部分代码片段