您的位置:首页 > 理论基础 > 计算机网络

httpclient4.5 https请求 忽略身份验证 自定义忽略的协议

2018-11-24 10:15 671 查看
[code]

import java.nio.charset.Charset;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;

import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.ConnectionConfig;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.config.SocketConfig;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.LayeredConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.ssl.SSLContextBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class HttpClientConfig {
private static SSLContextBuilder builder = null;
static {
try {
builder = new SSLContextBuilder();
builder.loadTrustMaterial(null, (TrustStrategy)(x509Certificates, s) -> true);

} catch (Exception e) {
e.printStackTrace();
}
}
@Bean(destroyMethod = "shutdown")
public PoolingHttpClientConnectionManager poolingHttpClientConnectionManager()
throws KeyManagementException, NoSuchAlgorithmException {
LayeredConnectionSocketFactory sslsf =  new SSLConnectionSocketFactory(builder.build(), new String[]{"SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.2"}, null, NoopHostnameVerifier.INSTANCE);;
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory> create()
.register("https", sslsf)
.register("http", new PlainConnectionSocketFactory())
.build();
SocketConfig socketConfig = SocketConfig.copy(SocketConfig.DEFAULT).setSoKeepAlive(true).setTcpNoDelay(true).setSoTimeout(10000).build();
ConnectionConfig connectionConfig = ConnectionConfig.copy(ConnectionConfig.DEFAULT).setCharset(Charset.forName("UTF-8")).build();

PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
connectionManager.setMaxTotal(200);
connectionManager.setDefaultMaxPerRoute(20);
connectionManager.setDefaultSocketConfig(socketConfig);
connectionManager.setDefaultConnectionConfig(connectionConfig);
return connectionManager;
}

@Bean
public HttpClient httpClient(PoolingHttpClientConnectionManager connectionManager){
RequestConfig requestConfig = RequestConfig.copy(RequestConfig.DEFAULT).setConnectTimeout(10000).setConnectionRequestTimeout(10000).build();
return HttpClients
.custom().setConnectionManager(connectionManager).setDefaultRequestConfig(requestConfig).build();
}
}

 

[code]"SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.2" 是自定义要忽略的协议,可以根据具体情况指定

使用时注入httpClient:

[code] HttpPost post = new HttpPost(smsConfig.getServerUrl());
Sms253SendRequest sms253SendRequest = new Sms253SendRequest(this.smsConfig.getAccount(), this.smsConfig.getPassword(), message, phone);
post.setEntity(new ByteArrayEntity(JSON.toJSONString(sms253SendRequest).getBytes("UTF-8"), ContentType.APPLICATION_JSON));
HttpResponse response = this.httpClient.execute(post);

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐