在调试接口过程中,发现本地调试一直正常,但服务器一直报 “Server chose SSLv3, but that protocol version is not enabled or not supported by the client.” 去网上查了下,说linux要开启SSL v3。咨询了下运维,给我的答复是,https的URL可以在服务器上访问。 在这个过程中我看了下服务器的jdk版本和我本地运行的jdk版本不一致,网上看了下这两个版本的区别,发现本地的jdk默认开启了SSLV3,而服务器上jdk版本是关闭的。 然后去问了客户给的https支持的协议,说是支持SSLV3,不支持SSLV2及其他。 因为所有客户都是http协议访问,所以让客户把https协议改成了http协议。就没再开启服务器jdk sslv3 下面给出代码实现
public static String httpPost(String url, String json,Map<String,String> headerMap)
throws Exception {
String res = null;
// 将JSON进行UTF-8编码,以便传输中文
//String encoderJson = URLEncoder.encode(json,"UTF-8");
final CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
httpPost.addHeader(HTTP.CONTENT_TYPE, HttpUtils.APPLICATION_JSON);
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(3000).setConnectTimeout(3000).build();//设置请求和传输超时时间
httpPost.setConfig(requestConfig);
if(headerMap!=null){
for(String key:headerMap.keySet()){
httpPost.addHeader(key, headerMap.get(key));
}
}
StringEntity entity = new StringEntity(json,"UTF-8");
entity.setContentType(CONTENT_TYPE_TEXT_JSON);
entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
APPLICATION_JSON));
httpPost.setEntity(entity);
logger.info("发送的报文:"+json);
HttpResponse response = httpClient.execute(httpPost);
int statusCode = response.getStatusLine().getStatusCode();
logger.info(statusCode);
if (HttpStatus.SC_OK == statusCode) {
HttpEntity httpEntity = response.getEntity();
res = EntityUtils.toString(httpEntity, "UTF-8");
logger.info("接收的报文:"+res);
}
httpClient.close();
return res;
}





