外部インタフェースのサポートHTTPS要求を呼び出し

1、次のように、RestTemplateConfig.javaファイルを作成します。

パッケージcom.htsec.monitor.internet.config。


輸入com.htsec.monitor.internet.util.HttpClientUtils。
輸入org.apache.http.impl.client.CloseableHttpClient;
輸入org.springframework.context.annotation.Bean;
輸入org.springframework.context.annotation.Configuration。
輸入org.springframework.http.client.ClientHttpResponse。
輸入org.springframework.http.client.HttpComponentsClientHttpRequestFactory。
輸入org.springframework.web.client.ResponseErrorHandler;
輸入org.springframework.web.client。RestTemplate ;


@Configuration
パブリッククラスRestTemplateConfig {

@Bean
公共RestTemplate httpsRestTemplate(HttpComponentsClientHttpRequestFactory httpsFactory){
RestTemplate restTemplate =新しいRestTemplate(httpsFactory)。
restTemplate.setErrorHandler(
新しいResponseErrorHandler(){
@Override
公共ブールhasError(ClientHttpResponse clientHttpResponse){
戻り偽;
}

@Override
公共ボイドhandleErrorの(ClientHttpResponse clientHttpResponse){
//默认处理非200的返回、会抛异常
}
})。
restTemplateを返します。
}

@Bean(名= "httpsFactory")
公衆HttpComponentsClientHttpRequestFactory httpComponentsClientHttpRequestFactory()は
例外{スロー
CloseableHttpClientのHttpClient = HttpClientUtilsをacceptsUntrustedCertsHttpClient();
HttpComponentsClientHttpRequestFactory httpsFactory =
新しいHttpComponentsClientHttpRequestFactory(HttpClientを);
httpsFactory.setReadTimeout(40000)。
httpsFactory.setConnectTimeout(40000)。
httpsFactoryを返します。
}
}
2、创建HttpClientUtils.java文件、内容如下。
パッケージcom.htsec.monitor.internet.util。

輸入org.apache.http.config.Registry;
輸入org.apache.http.config.RegistryBuilder。
輸入org.apache.http.conn.socket.ConnectionSocketFactory。
輸入org.apache.http.conn.socket.PlainConnectionSocketFactory。
輸入org.apache.http.conn.ssl.NoopH​​ostnameVerifier;
輸入org.apache.http.conn.ssl.SSLConnectionSocketFactory。
輸入org.apache.http.conn.ssl.TrustStrategy;
輸入org.apache.http.impl.client.CloseableHttpClient;
輸入org.apache.http.impl.client.HttpClientBuilder。
輸入org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
輸入org.apache.http.ssl.SSLContextBuilder。

輸入javax.net.ssl.HostnameVerifier;
輸入javax.net.ssl.SSLContext;
輸入java.security.KeyManagementException。
輸入java.security.KeyStoreException。
輸入java.security.NoSuchAlgorithmException。
輸入java.security.cert.CertificateException。
輸入はjava.security.cert.X509Certificate;

パブリッククラスHttpClientUtils {

パブリック静的CloseableHttpClient acceptsUntrustedCertsHttpClient()はでKeyStoreException、持つNoSuchAlgorithmException、KeyManagementExceptionを{スロー
HttpClientBuilder B = HttpClientBuilder.create()。

//セットアップすべての証明書を許可トラスト戦略。
//
。SSLContextのSSLContextの=新しいSSLContextBuilder()loadTrustMaterial(ヌル、新しいTrustStrategy(){
@Override
公共ブールisTrusted(X509Certificateの[] arg0に、文字列ARG1)は、CertificateExceptionがスロー{
trueを返す;
}
})。ビルド();
b.setSSLContext(SSLContextの);

//はどちらか、ホスト名をチェックしません。
// -使用SSLConnectionSocketFactory.getDefaultHostnameVerifier()、あなたが弱体化しない場合
のHostnameVerifierのHostnameVerifier = NoopH​​ostnameVerifier.INSTANCE。

//ここでは特別な部分です:
// -私たちの弱体化「信頼戦略」を使用し、SSLソケットファクトリを作成する必要があります。
// -と、それを登録するには、レジストリを作成します。
//
SSLConnectionSocketFactoryのSSLSocketFactory =新しいSSLConnectionSocketFactory(SSLContextの、のHostnameVerifier)。
レジストリ<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder <ConnectionSocketFactory>作成()。
.register( "HTTP"、PlainConnectionSocketFactory.getSocketFactory())
.register( "HTTPS"のSSLSocketFactory)
.build();

//今、私たちはレジストリを使用して接続マネージャを作成します。
// -マルチスレッド利用可能
PoolingHttpClientConnectionManager connMgr =新しいPoolingHttpClientConnectionManager(socketFactoryRegistry)は、
connMgr。
connMgr.setDefaultMaxPerRoute(100)。
b.setConnectionManager(connMgr)。

//最後に、構築のHttpClient。
// -やりました!
CloseableHttpClientクライアント= b.build();

クライアントを返します。
}

}
3.その後、クラスを作成すると、メソッド、EccHttpUtils.javaを呼び出し、
com.htsec.monitor.internet.utilパッケージ; 

インポートcom.alibaba.fastjson.JSONObject;
インポートlombok.extern.slf4j.Slf4j;
インポートorg.springframework.beans.factory.annotation.Autowired;
インポートorg.springframework.http.HttpEntity ;
インポートorg.springframework.http.HttpHeaders;
インポートorg.springframework.http.HttpMethod;
インポートorg.springframework.stereotype.Component;
インポートorg.springframework.web.client.RestTemplate;


/ **
* 11分の2019 ON LQZによって作成されました/ 13
* /

SLF4J @
@Component
パブリッククラスEccHttpUtils {

//サポートHTTPS、この場所は@Beanは、ステップ1で作成した注入された名前から無料RestTemplateこの言葉は問題ではありません、

@Autowired
RestTemplate restTemplate。


公共JSONObject のdoPost(文字列のURL、JSONObject requestBody){//外部调用方法

HttpHeaders httpHeaders =新しいHttpHeaders();
httpHeaders.add( "Content-Typeの"、 "アプリケーション/ jsonの");


/*requestBody.put("page」、1);
requestBody.put( "サイズ"、1); * /
HttpEntityの<string> httpEntity = NULL;
(!requestBody = NULL){場合
httpEntity =新しいHttpEntity <文字列>(requestBody.toJSONString()、httpHeaders)。
}他{
httpEntity =新しいHttpEntity <>(httpHeaders)。
}
log.info( "请求外部接口URL =" + URL +」、
RESULT = restTemplate.exchange JSONObject(URL、HttpMethod.POST、HttpEntity、JSONObject.class).getBody();
log.info(結果+ "を要求=外部インタフェース戻り結果");
戻り値の結果;
}
}


おすすめ

転載: www.cnblogs.com/zaierzai/p/11857522.html