Skip to content

Commit 98f0260

Browse files
authored
Fix Http client 5.0 init (#369)
1 parent fad1ed5 commit 98f0260

File tree

2 files changed

+71
-5
lines changed

2 files changed

+71
-5
lines changed

cloudinary-http5/src/main/java/com/cloudinary/http5/ApiStrategy.java

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,20 @@
88
import com.cloudinary.strategies.AbstractApiStrategy;
99
import com.cloudinary.utils.ObjectUtils;
1010
import org.apache.hc.client5.http.classic.methods.*;
11+
import org.apache.hc.client5.http.config.RequestConfig;
1112
import org.apache.hc.client5.http.entity.UrlEncodedFormEntity;
1213
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
1314
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
15+
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
1416
import org.apache.hc.client5.http.impl.classic.HttpClients;
17+
import org.apache.hc.client5.http.io.HttpClientConnectionManager;
1518
import org.apache.hc.core5.http.HttpEntity;
19+
import org.apache.hc.core5.http.HttpHost;
1620
import org.apache.hc.core5.http.NameValuePair;
1721
import org.apache.hc.core5.http.io.entity.EntityUtils;
1822
import org.apache.hc.core5.http.io.entity.StringEntity;
1923
import org.apache.hc.core5.net.URIBuilder;
24+
import org.apache.hc.core5.util.Timeout;
2025
import org.cloudinary.json.JSONException;
2126
import org.cloudinary.json.JSONObject;
2227

@@ -36,15 +41,42 @@ public class ApiStrategy extends AbstractApiStrategy {
3641

3742
private CloseableHttpClient client;
3843

39-
@Override
4044
public void init(Api api) {
4145
super.init(api);
4246

43-
this.client = HttpClients.custom()
44-
.setUserAgent(this.api.cloudinary.getUserAgent() + " ApacheHttpClient/" + APACHE_HTTP_CLIENT_VERSION)
47+
HttpClientBuilder clientBuilder = HttpClients.custom();
48+
clientBuilder.useSystemProperties().setUserAgent(this.api.cloudinary.getUserAgent() + " ApacheHttpClient/" + APACHE_HTTP_CLIENT_VERSION);
49+
50+
HttpClientConnectionManager connectionManager = (HttpClientConnectionManager) api.cloudinary.config.properties.get("connectionManager");
51+
if (connectionManager != null) {
52+
clientBuilder.setConnectionManager(connectionManager);
53+
}
54+
55+
RequestConfig requestConfig = buildRequestConfig();
56+
57+
client = clientBuilder
58+
.setDefaultRequestConfig(requestConfig)
4559
.build();
4660
}
4761

62+
public RequestConfig buildRequestConfig() {
63+
RequestConfig.Builder requestConfigBuilder = RequestConfig.custom();
64+
65+
if (api.cloudinary.config.proxyHost != null && api.cloudinary.config.proxyPort != 0) {
66+
HttpHost proxy = new HttpHost(api.cloudinary.config.proxyHost, api.cloudinary.config.proxyPort);
67+
requestConfigBuilder.setProxy(proxy);
68+
}
69+
70+
int timeout = this.api.cloudinary.config.timeout;
71+
if (timeout > 0) {
72+
requestConfigBuilder.setResponseTimeout(Timeout.ofSeconds(timeout))
73+
.setConnectionRequestTimeout(Timeout.ofSeconds(timeout))
74+
.setConnectTimeout(Timeout.ofSeconds(timeout));
75+
}
76+
77+
return requestConfigBuilder.build();
78+
}
79+
4880
@SuppressWarnings({"rawtypes", "unchecked"})
4981
public ApiResponse callApi(Api.HttpMethod method, String apiUrl, Map<String, ?> params, Map options, String autorizationHeader) throws Exception {
5082
HttpUriRequestBase request = prepareRequest(method, apiUrl, params, options);

cloudinary-http5/src/test/java/com/cloudinary/test/ApiTest.java

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,50 @@
11
package com.cloudinary.test;
22

3+
import com.cloudinary.Cloudinary;
34
import com.cloudinary.api.ApiResponse;
5+
import com.cloudinary.http5.ApiStrategy;
46
import com.cloudinary.utils.ObjectUtils;
7+
import org.apache.hc.client5.http.config.RequestConfig;
8+
import org.apache.hc.core5.http.HttpHost;
59
import org.apache.hc.core5.util.Timeout;
610
import org.junit.Test;
711
import org.junit.experimental.categories.Category;
12+
813
import java.util.Map;
914

1015

1116
public class ApiTest extends AbstractApiTest {
1217

18+
@Test
19+
public void testBuildRequestConfig_withProxyAndTimeout() {
20+
Cloudinary cloudinary = new Cloudinary("cloudinary://test:test@test.com");
21+
cloudinary.config.proxyHost = "127.0.0.1";
22+
cloudinary.config.proxyPort = 8080;
23+
cloudinary.config.timeout = 15;
24+
25+
RequestConfig requestConfig = ((ApiStrategy)cloudinary.api().getStrategy()).buildRequestConfig();
26+
27+
assert(requestConfig.getProxy() != null);
28+
HttpHost proxy = requestConfig.getProxy();
29+
assert("127.0.0.1" == proxy.getHostName());
30+
assert(8080 == proxy.getPort());
31+
32+
assert(15000 == requestConfig.getConnectionRequestTimeout().toMilliseconds());
33+
assert(15000 == requestConfig.getResponseTimeout().toMilliseconds());
34+
}
35+
36+
@Test
37+
public void testBuildRequestConfig_withoutProxy() {
38+
Cloudinary cloudinary = new Cloudinary("cloudinary://test:test@test.com");
39+
cloudinary.config.timeout = 10;
40+
41+
RequestConfig requestConfig = ((ApiStrategy)cloudinary.api().getStrategy()).buildRequestConfig();
42+
43+
assert(requestConfig.getProxy() == null);
44+
assert(10000 == requestConfig.getConnectionRequestTimeout().toMilliseconds());
45+
assert(10000 == requestConfig.getResponseTimeout().toMilliseconds());
46+
}
47+
1348
@Category(TimeoutTest.class)
1449
@Test(expected = Exception.class)
1550
public void testConnectTimeoutParameter() throws Exception {
@@ -41,5 +76,4 @@ public void testTimeoutParameter() throws Exception {
4176
throw new Exception("Socket timeout");
4277
}
4378
}
44-
}
45-
79+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy