下面列出了怎么用org.springframework.http.client.HttpComponentsClientHttpRequestFactory的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* Rest template setup including a disabled SSL certificate validation.
* @throws Exception in case of errors
*/
private static void setupRestTemplate() throws Exception {
final TrustStrategy acceptingTrustStrategy = (cert, authType) -> true;
final SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom()
.loadTrustMaterial(null, acceptingTrustStrategy)
.build();
final HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
final HttpClient httpClient = HttpClientBuilder.create()
.setRedirectStrategy(new LaxRedirectStrategy())
.setSSLSocketFactory(new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE))
.build();
factory.setHttpClient(httpClient);
restTemplate.setRequestFactory(factory);
for (int i = 0; i < restTemplate.getMessageConverters().size(); i++) {
if (restTemplate.getMessageConverters().get(i) instanceof StringHttpMessageConverter) {
restTemplate.getMessageConverters().set(i, new StringHttpMessageConverter(StandardCharsets.UTF_8));
break;
}
}
}
@Before
public void setup() {
ByteArrayHttpMessageConverter emptyBodyConverter = new ByteArrayHttpMessageConverter();
emptyBodyConverter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));
List<HttpMessageConverter<?>> converters = new ArrayList<>(3);
converters.add(emptyBodyConverter);
converters.add(new ByteArrayHttpMessageConverter());
converters.add(new ResourceHttpMessageConverter());
converters.add(new MappingJackson2HttpMessageConverter());
AllEncompassingFormHttpMessageConverter converter = new AllEncompassingFormHttpMessageConverter();
converter.setPartConverters(converters);
restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
restTemplate.setMessageConverters(Collections.singletonList(converter));
}
/**
* httpRequestFactory.
*
* @return
*/
@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
PoolingHttpClientConnectionManager pollingConnectionManager = new PoolingHttpClientConnectionManager(
30, TimeUnit.SECONDS);
// max connection
pollingConnectionManager.setMaxTotal(constants.getRestTemplateMaxTotal());
pollingConnectionManager.setDefaultMaxPerRoute(constants.getRestTemplateMaxPerRoute());
HttpClientBuilder httpClientBuilder = HttpClients.custom();
httpClientBuilder.setConnectionManager(pollingConnectionManager);
// add Keep-Alive
httpClientBuilder
.setKeepAliveStrategy(new DefaultConnectionKeepAliveStrategy());
HttpClient httpClient = httpClientBuilder.build();
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory =
new HttpComponentsClientHttpRequestFactory(httpClient);
clientHttpRequestFactory.setReadTimeout(constants.getHttp_read_timeOut());
clientHttpRequestFactory.setConnectTimeout(constants.getHttp_connect_timeOut());
return clientHttpRequestFactory;
}
public boolean deleteArtifact(String longUrl) {
try {
CloseableHttpClient httpClient;
if (getUserName() != null && getPassword() != null) {
URL url = new URL(getUrl());
HttpHost httpHost = new HttpHost(url.getHost(), url.getPort());
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope(httpHost),
new UsernamePasswordCredentials(getUserName(), getPassword()));
httpClient = HttpClientBuilder.create().setDefaultCredentialsProvider(credsProvider).build();
} else {
httpClient = HttpClientBuilder.create().build();
}
RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory(httpClient));
restTemplate.delete(new URI(longUrl));
} catch (Exception e) {
return false;
}
return true;
}
public boolean deleteArtifact(String longUrl) {
try {
CloseableHttpClient httpClient;
if (getUserName() != null && getPassword() != null) {
URL url = new URL(getUrl());
HttpHost httpHost = new HttpHost(url.getHost(), url.getPort());
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope(httpHost),
new UsernamePasswordCredentials(getUserName(), getPassword()));
httpClient = HttpClientBuilder.create().setDefaultCredentialsProvider(credsProvider).build();
} else {
httpClient = HttpClientBuilder.create().build();
}
RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory(httpClient));
restTemplate.delete(new URI(longUrl));
} catch (Exception e) {
return false;
}
return true;
}
public boolean deleteArtifact(String longUrl) {
try {
CloseableHttpClient httpClient;
if (getUserName() != null && getPassword() != null) {
URL url = new URL(getUrl());
HttpHost httpHost = new HttpHost(url.getHost(), url.getPort());
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope(httpHost),
new UsernamePasswordCredentials(getUserName(), getPassword()));
httpClient = HttpClientBuilder.create().setDefaultCredentialsProvider(credsProvider).build();
} else {
httpClient = HttpClientBuilder.create().build();
}
RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory(httpClient));
restTemplate.delete(new URI(longUrl));
} catch (Exception e) {
return false;
}
return true;
}
public static RestOperations createCommonsHttpRestTemplate(int maxConnPerRoute, int maxConnTotal,
int connectTimeout, int soTimeout, int retryTimes, RetryPolicyFactory retryPolicyFactory) {
HttpClient httpClient = HttpClientBuilder.create()
.setMaxConnPerRoute(maxConnPerRoute)
.setMaxConnTotal(maxConnTotal)
.setDefaultSocketConfig(SocketConfig.custom().setSoTimeout(soTimeout).build())
.setDefaultRequestConfig(RequestConfig.custom().setConnectTimeout(connectTimeout).build())
.build();
ClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
RestTemplate restTemplate = new RestTemplate(factory);
//set jackson mapper
for (HttpMessageConverter<?> hmc : restTemplate.getMessageConverters()) {
if (hmc instanceof MappingJackson2HttpMessageConverter) {
ObjectMapper objectMapper = createObjectMapper();
MappingJackson2HttpMessageConverter mj2hmc = (MappingJackson2HttpMessageConverter) hmc;
mj2hmc.setObjectMapper(objectMapper);
}
}
return (RestOperations) Proxy.newProxyInstance(RestOperations.class.getClassLoader(),
new Class[]{RestOperations.class},
new RetryableRestOperationsHandler(restTemplate, retryTimes, retryPolicyFactory));
}
public static RestOperations getRestOperations(HttpComponentsClientHttpRequestFactory factory) {
RestTemplate restTemplate = new RestTemplate(factory);
StringHttpMessageConverter stringMessageConverter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
MappingJackson2HttpMessageConverter jackson2Converter = new MappingJackson2HttpMessageConverter();
ByteArrayHttpMessageConverter byteArrayHttpMessageConverter = new ByteArrayHttpMessageConverter();
FormHttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter();
formHttpMessageConverter.setCharset(Charset.forName("UTF-8"));
List<HttpMessageConverter<?>> converters = new ArrayList<>();
converters.add(jackson2Converter);
converters.add(stringMessageConverter);
converters.add(byteArrayHttpMessageConverter);
converters.add(formHttpMessageConverter);
restTemplate.setMessageConverters(converters);
return restTemplate;
}
public AbstractRestTemplateClient ignoreAuthenticateServer() {
//backward compatible with android httpclient 4.3.x
if(restTemplate.getRequestFactory() instanceof HttpComponentsClientHttpRequestFactory) {
try {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build();
X509HostnameVerifier verifier = ignoreSslWarning ? new AllowAllHostnameVerifier() : new BrowserCompatHostnameVerifier();
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext, verifier);
HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build();
((HttpComponentsClientHttpRequestFactory)restTemplate.getRequestFactory()).setHttpClient(httpClient);
} catch (Exception e) {
e.printStackTrace();
}
} else {
Debug.error("the request factory " + restTemplate.getRequestFactory().getClass().getName() + " does not support ignoreAuthenticateServer");
}
return this;
}
private String getChecksum(String defaultValue, String url,
String version) {
String result = defaultValue;
if (result == null && StringUtils.hasText(url)) {
CloseableHttpClient httpClient = HttpClients.custom()
.setSSLHostnameVerifier(new NoopHostnameVerifier())
.build();
HttpComponentsClientHttpRequestFactory requestFactory
= new HttpComponentsClientHttpRequestFactory();
requestFactory.setHttpClient(httpClient);
url = constructUrl(url, version);
try {
ResponseEntity<String> response
= new RestTemplate(requestFactory).exchange(
url, HttpMethod.GET, null, String.class);
if (response.getStatusCode().equals(HttpStatus.OK)) {
result = response.getBody();
}
}
catch (HttpClientErrorException httpException) {
// no action necessary set result to undefined
logger.debug("Didn't retrieve checksum because", httpException);
}
}
return result;
}
protected AbstractIT() {
baseUri = URI.create(System.getProperty("baseUrl", "http://localhost:8080"));
clientFactory = Configuration.builder()
.setBaseUri(baseUri)
.setClientHttpRequestFactory(new BufferingClientHttpRequestFactory(
new HttpComponentsClientHttpRequestFactory()))
.setRestTemplateConfigurer(new RestTemplateConfigurer() {
@Override
public void configure(RestTemplate restTemplate) {
restTemplate.getInterceptors().addAll(asList(
new LoggingClientHttpRequestInterceptor(),
createdEntityRecordingInterceptor
));
}
})
.build()
.buildClientFactory();
}
@Test
public void test3() {
RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
System.out.println("show catalog");
System.out.println(restTemplate.getForObject("http://localhost:8080/catalog", Object.class));
System.out.println(restTemplate.getForObject("http://localhost:8080/catalog", Object.class));
System.out.println(restTemplate.getForObject("http://localhost:8080/catalog", Object.class));
System.out.println(restTemplate.getForObject("http://localhost:8080/catalog", Object.class));
System.out.println("add cart");
Map<String, Object> cartItem = new HashMap<>();
cartItem.put("itemId", 2);
cartItem.put("quantity", 1);
System.out.println(restTemplate.postForObject("http://localhost:8080/cart/items", cartItem, Object.class));
}
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) throws Exception {
SSLContext sslContext = SSLContextBuilder
.create()
.loadKeyMaterial(ResourceUtils.getFile("classpath:keystore.jks"), allPassword, allPassword)
.loadTrustMaterial(ResourceUtils.getFile("classpath:truststore.jks"), allPassword)
.build();
HttpClient client = HttpClients.custom()
.setSSLContext(sslContext)
.build();
return builder
.requestFactory(new HttpComponentsClientHttpRequestFactory(client))
.build();
}
@Before
public void setUp() {
ByteArrayHttpMessageConverter emptyBodyConverter = new ByteArrayHttpMessageConverter();
emptyBodyConverter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));
List<HttpMessageConverter<?>> converters = new ArrayList<>(3);
converters.add(emptyBodyConverter);
converters.add(new ByteArrayHttpMessageConverter());
converters.add(new ResourceHttpMessageConverter());
converters.add(new MappingJackson2HttpMessageConverter());
AllEncompassingFormHttpMessageConverter converter = new AllEncompassingFormHttpMessageConverter();
converter.setPartConverters(converters);
restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
restTemplate.setMessageConverters(Collections.singletonList(converter));
}
@Test
public final void givenAcceptingAllCertificates_whenHttpsUrlIsConsumed_thenOk_2() throws GeneralSecurityException {
final TrustStrategy acceptingTrustStrategy = (cert, authType) -> true;
final SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build();
final SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
final Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory> create()
.register("https", sslsf)
.register("http", new PlainConnectionSocketFactory())
.build();
final BasicHttpClientConnectionManager connectionManager = new BasicHttpClientConnectionManager(socketFactoryRegistry);
final CloseableHttpClient httpClient = HttpClients.custom()
.setSSLSocketFactory(sslsf)
.setConnectionManager(connectionManager)
.build();
final HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
final ResponseEntity<String> response = new RestTemplate(requestFactory).exchange(urlOverHttps, HttpMethod.GET, null, String.class);
assertThat(response.getStatusCode().value(), equalTo(200));
}
@Test
void httpComponentsClientUsingPemShouldWork() throws Exception {
File caCertificate = new File(Settings.findWorkDir(), "ca/certs/ca.cert.pem");
SslConfiguration sslConfiguration = SslConfiguration.forTrustStore(SslConfiguration.KeyStoreConfiguration
.of(new FileSystemResource(caCertificate)).withStoreType(SslConfiguration.PEM_KEYSTORE_TYPE));
ClientHttpRequestFactory factory = HttpComponents.usingHttpComponents(new ClientOptions(), sslConfiguration);
RestTemplate template = new RestTemplate(factory);
String response = request(template);
assertThat(factory).isInstanceOf(HttpComponentsClientHttpRequestFactory.class);
assertThat(response).isNotNull().contains("initialized");
((DisposableBean) factory).destroy();
}
RestTemplate restTemplate() throws Exception {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(trustStore.getURL(), trustStorePassword.toCharArray())
.build();
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext);
HttpClient httpClient = HttpClients.custom()
.setSSLSocketFactory(socketFactory)
.build();
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
return new RestTemplate(factory);
}
public MDSUrlService(String url, String token, ObjectMapper objectMapper, Storage storage) {
super();
this.url = url;
this.token = token;
this.storage = storage;
this.objectMapper = objectMapper;
String unique = "";
try {
URI tempUrl = new URI(url);
unique = tempUrl.getHost() + tempUrl.getPath();
} catch (URISyntaxException ex) {
logger.log(Level.SEVERE, null, ex);
}
namespace = Base64.getUrlEncoder().withoutPadding().encodeToString(unique.getBytes());
HttpComponentsClientHttpRequestFactory httpComponentsClientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory();
restTemplate = new RestTemplate(httpComponentsClientHttpRequestFactory);
//TODO remove hardcoded solution to use right cert for production MDS
if(token != null){
jwtVerifier = new MDSJwtVerifier(retriveRootX509Certificate(PRODUCTION_FIDO_METADATA_SERVICE_ROOT_CERTIFICATE_CLASSPATH));
}
else{
jwtVerifier = new MDSJwtVerifier(retriveRootX509Certificate(DEFAULT_FIDO_METADATA_SERVICE_ROOT_CERTIFICATE_CLASSPATH));
}
}
@Bean
@ConditionalOnClass(SSLContextBuilder.class)
@ConditionalOnProperty(value = "wiremock.rest-template-ssl-enabled",
matchIfMissing = true)
public RestTemplateCustomizer wiremockRestTemplateCustomizer() {
return new RestTemplateCustomizer() {
@Override
public void customize(RestTemplate restTemplate) {
if (restTemplate
.getRequestFactory() instanceof HttpComponentsClientHttpRequestFactory) {
HttpComponentsClientHttpRequestFactory factory = (HttpComponentsClientHttpRequestFactory) restTemplate
.getRequestFactory();
factory.setHttpClient(createSslHttpClient());
}
}
private HttpClient createSslHttpClient() {
try {
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
new SSLContextBuilder().loadTrustMaterial(null,
TrustSelfSignedStrategy.INSTANCE).build(),
NoopHostnameVerifier.INSTANCE);
return HttpClients.custom().setSSLSocketFactory(socketFactory)
.build();
}
catch (Exception ex) {
throw new IllegalStateException("Unable to create SSL HttpClient",
ex);
}
}
};
}
protected RestTemplate createRestTemplate(MappingProperties mapping) {
CloseableHttpClient client = createHttpClient(mapping).build();
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(client);
requestFactory.setConnectTimeout(mapping.getTimeout().getConnect());
requestFactory.setReadTimeout(mapping.getTimeout().getRead());
return new RestTemplate(requestFactory);
}
@SuppressWarnings("deprecation")
@Parameters
public static Iterable<? extends ClientHttpRequestFactory> data() {
return Arrays.asList(
new SimpleClientHttpRequestFactory(),
new HttpComponentsClientHttpRequestFactory(),
new org.springframework.http.client.Netty4ClientHttpRequestFactory(),
new OkHttp3ClientHttpRequestFactory()
);
}
public LoanApplicationService(ServiceConfiguration serviceConfiguration) {
this.restTemplate = new RestTemplate();
// tag::custom_request_factory[]
this.restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
// end::custom_request_factory[]
this.serviceConfiguration = serviceConfiguration;
}
@Bean
@LoadBalanced
RestTemplate restTemplate() {
HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
httpRequestFactory.setReadTimeout(3000);
httpRequestFactory.setConnectTimeout(3000);
return new RestTemplate(httpRequestFactory);
}
ClientHttpRequestFactory configureClient(ClientHttpRequestInterceptor interceptor) {
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setReadTimeout(1000);
factory.setConnectTimeout(1000);
this.interceptor = interceptor;
return factory;
}
@Bean
public RestTemplate pdfServerClient() {
HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
httpRequestFactory.setConnectionRequestTimeout(CONNECT_TIMEOUT);
httpRequestFactory.setReadTimeout(READ_TIMEOUT);
httpRequestFactory.setConnectTimeout(CONNECT_TIMEOUT);
return new RestTemplate(httpRequestFactory);
}
@SuppressWarnings("deprecation")
@Parameters
public static Iterable<? extends ClientHttpRequestFactory> data() {
return Arrays.asList(
new SimpleClientHttpRequestFactory(),
new HttpComponentsClientHttpRequestFactory(),
new Netty4ClientHttpRequestFactory(),
new OkHttp3ClientHttpRequestFactory()
);
}
@Parameterized.Parameters()
public static Iterable<Supplier<ClientHttpRequestFactory>> data() {
return Arrays.asList(
SimpleClientHttpRequestFactory::new,
OkHttp3ClientHttpRequestFactory::new,
HttpComponentsClientHttpRequestFactory::new);
}
@Override
protected void setUp() throws Exception {
HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
httpRequestFactory.setConnectTimeout(1000);
httpRequestFactory.setReadTimeout(2000);
HttpClient httpClient = HttpClientBuilder.create()
.setMaxConnTotal(100)
.setMaxConnPerRoute(10)
.build();
httpRequestFactory.setHttpClient(httpClient);
template = new RestTemplate(httpRequestFactory);
}
private HttpComponentsClientHttpRequestFactory getRequestFactory(final URL url, final String username, final String password, final SSLConnectionSocketFactory sslConnectionSocketFactory, final SSLContext sslContext) throws MalformedURLException {
String theUser = username;
String thePassword = password;
String userInfo = url.getUserInfo();
if (userInfo != null && theUser == null) {
String[] userParts = userInfo.split(":");
if (userParts.length > 0) {
theUser = userParts[0];
}
if (userParts.length > 1) {
thePassword = userParts[1];
}
}
final HttpClientBuilder bldr = HttpClientBuilder.create().
setDefaultCredentialsProvider(getCredentialsProvider(url, theUser, thePassword));
bldr.setDefaultHeaders(Arrays.asList(new BasicHeader(HttpHeaders.CONTENT_TYPE, "application/json")));
if (sslConnectionSocketFactory != null) {
bldr.setSSLSocketFactory(sslConnectionSocketFactory);
}
if (sslContext != null) {
bldr.setSslcontext(sslContext);
}
HttpClient httpClient = bldr.build();
// RabbitMQ HTTP API currently does not support challenge/response for PUT methods.
AuthCache authCache = new BasicAuthCache();
BasicScheme basicScheme = new BasicScheme();
authCache.put(new HttpHost(rootUri.getHost(), rootUri.getPort(), rootUri.getScheme()), basicScheme);
final HttpClientContext ctx = HttpClientContext.create();
ctx.setAuthCache(authCache);
return new HttpComponentsClientHttpRequestFactory(httpClient) {
@Override
protected HttpContext createHttpContext(HttpMethod httpMethod, URI uri) {
return ctx;
}
};
}
/**
* This method updates a pull request on Github.
*
* @param send
* @param gitConfig
* @throws GitHubAPIException
* @throws URISyntaxException
*/
public void updatePullRequest(GithubUpdateRequest send, GitConfiguration gitConfig, Integer requestNumber)
throws GitHubAPIException, URISyntaxException {
URI configUri = createURIFromApiLink(gitConfig.getRepoApiLink());
// Build URI
UriComponentsBuilder apiUriBuilder = UriComponentsBuilder.newInstance().scheme(configUri.getScheme())
.host(configUri.getHost()).path(configUri.getPath() + "/pulls/" + requestNumber);
apiUriBuilder.queryParam("access_token", gitConfig.getBotToken());
URI pullsUri = apiUriBuilder.build().encode().toUri();
// For PATCH-Requests
HttpHeaders headers = new HttpHeaders();
MediaType mediaType = new MediaType("application", "merge-patch+json");
headers.setContentType(mediaType);
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
RestTemplate rest = new RestTemplate(requestFactory);
try {
// Send request to the GitHub-API
rest.exchange(pullsUri, HttpMethod.PATCH, new HttpEntity<>(send), String.class);
} catch (RestClientException e) {
throw new GitHubAPIException("Could not update pull request!", e);
}
}