SpringBoot使用RestTemplate02使用OkHttp

编程

1、简介

OkHttp是一个高效的HTTP客户端,允许所有同一个主机地址的请求共享同一个socket连接;连接池减少请求延时;透明的GZIP压缩减少响应数据的大小;缓存响应内容,避免一些完全重复的请求

当网络出现问题的时候OkHttp依然坚守自己的职责,它会自动恢复一般的连接问题,如果你的服务有多个IP地址,当第一个IP请求失败时,OkHttp会交替尝试你配置的其他IP,OkHttp使用现代TLS技术(SNI, ALPN)初始化新的连接,当握手失败时会回退到TLS 1.0。

1)使用:它的请求/响应 API 使用构造器模式builders来设计,它支持阻塞式的同步请求和带回调的异步请求。

<dependency>

<groupId>com.squareup.okhttp3</groupId>

<artifactId>okhttp</artifactId>

<version>3.10.0</version>

</dependency>

import okhttp3.ConnectionPool;

import okhttp3.OkHttpClient;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.http.client.ClientHttpRequestFactory;

import org.springframework.http.client.OkHttp3ClientHttpRequestFactory;

import org.springframework.web.client.RestTemplate;

import javax.net.ssl.SSLContext;

import javax.net.ssl.SSLSocketFactory;

import javax.net.ssl.TrustManager;

import javax.net.ssl.X509TrustManager;

import java.security.KeyManagementException;

import java.security.NoSuchAlgorithmException;

import java.security.SecureRandom;

import java.security.cert.CertificateException;

import java.security.cert.X509Certificate;

import java.util.concurrent.TimeUnit;

@Configuration

public class OkHttpRestTemplateConfig {

@Bean("okHttpRestTemplate")

public RestTemplate okHttpRestTemplate() {

OkHttpClient httpClient = okHttpClient();

ClientHttpRequestFactory factory = new OkHttp3ClientHttpRequestFactory(httpClient);

RestTemplate restTemplate = new RestTemplate(factory);

// 可以添加消息转换

//restTemplate.setMessageConverters(...);

// 可以增加拦截器

//restTemplate.setInterceptors(...);

return restTemplate;

}

@Bean

public OkHttpClient okHttpClient() {

return new OkHttpClient.Builder()

//.sslSocketFactory(sslSocketFactory(), x509TrustManager())

.retryOnConnectionFailure(false)

.connectionPool(pool())

.connectTimeout(30, TimeUnit.SECONDS)

.readTimeout(30, TimeUnit.SECONDS)

.writeTimeout(30,TimeUnit.SECONDS)

.build();

}

@Bean

public X509TrustManager x509TrustManager() {

return new X509TrustManager() {

@Override

public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

}

@Override

public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

}

@Override

public X509Certificate[] getAcceptedIssuers() {

return new X509Certificate[0];

}

};

}

@Bean

public SSLSocketFactory sslSocketFactory() {

try {

//信任任何链接

SSLContext sslContext = SSLContext.getInstance("TLS");

sslContext.init(null, new TrustManager[]{x509TrustManager()}, new SecureRandom());

return sslContext.getSocketFactory();

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

} catch (KeyManagementException e) {

e.printStackTrace();

}

return null;

}

/**

* Create a new connection pool with tuning parameters appropriate for a single-user application.

* The tuning parameters in this pool are subject to change in future OkHttp releases. Currently

*/

@Bean

public ConnectionPool pool() {

return new ConnectionPool(200, 5, TimeUnit.MINUTES);

}

}

 

以上是 SpringBoot使用RestTemplate02使用OkHttp 的全部内容, 来源链接: utcz.com/z/511154.html

回到顶部