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)