Skip to content

Commit 0f5387f

Browse files
authored
Merge pull request #228 from crowdin/http-timeouts
feat: http timeouts
2 parents 178b640 + e72485c commit 0f5387f

File tree

5 files changed

+35
-5
lines changed

5 files changed

+35
-5
lines changed

README.md

+19
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,25 @@ Usage of these libraries is wrapped into interfaces and gives possibility to ove
8484

8585
The library entry point is `com.crowdin.client.Client` and this class has additional constructor where you can specify additional configurations (please refer to javadoc).
8686

87+
#### Http timeouts
88+
89+
Library allows you to configure http requests timeout.
90+
91+
```java
92+
import com.crowdin.client.Client;
93+
import com.crowdin.client.core.model.ClientConfig;
94+
import com.crowdin.client.core.model.Credentials;
95+
96+
public class Main {
97+
98+
public static void main(String[] args) {
99+
Credentials credentials = new Credentials("token", "organization");
100+
Client client = new Client(credentials, ClientConfig.builder().httpTimeoutMs(5000).build());
101+
}
102+
103+
}
104+
```
105+
87106
## Seeking Assistance
88107

89108
If you find any problems or would like to suggest a feature, please read the [How can I contribute](/CONTRIBUTING.md#how-can-i-contribute) section in our contributing guidelines.

src/main/java/com/crowdin/client/Sandbox.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.crowdin.client.core.http.exceptions.HttpBadRequestException;
44
import com.crowdin.client.core.http.exceptions.HttpException;
5+
import com.crowdin.client.core.model.ClientConfig;
56
import com.crowdin.client.core.model.Credentials;
67
import com.crowdin.client.core.model.ResponseObject;
78
import com.crowdin.client.users.model.User;
@@ -15,7 +16,7 @@ public static void main(String[] args) throws FileNotFoundException, Interrupted
1516
if (args.length > 0) {
1617
try {
1718
Credentials credentials = new Credentials(args[0], "oliynyk");
18-
var client = new Client(credentials);
19+
var client = new Client(credentials, ClientConfig.builder().httpTimeoutMs(5000).build());
1920
ResponseObject<User> user = client.getUsersApi().getAuthenticatedUser();
2021
System.out.println(user.getData());
2122
} catch (HttpException e) {

src/main/java/com/crowdin/client/core/CrowdinApi.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public CrowdinApi(Credentials credentials, ClientConfig clientConfig) {
3333
? clientConfig.getJsonTransformer() : new JacksonJsonTransformer();
3434
this.httpClient = (clientConfig.getHttpClient() != null)
3535
? clientConfig.getHttpClient()
36-
: new ApacheHttpClient(credentials, jsonTransformer, defaultHeaders, clientConfig.getProxy(), clientConfig.getProxyCreds());
36+
: new ApacheHttpClient(credentials, jsonTransformer, defaultHeaders, clientConfig.getProxy(), clientConfig.getProxyCreds(), clientConfig.getHttpTimeoutMs());
3737
this.clientConfig = clientConfig;
3838
if (credentials.getBaseUrl() != null) {
3939
if (credentials.getBaseUrl().endsWith("/")) {

src/main/java/com/crowdin/client/core/http/impl/http/ApacheHttpClient.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,22 @@ public ApacheHttpClient(Credentials credentials, JsonTransformer jsonTransformer
5959
.build();
6060
}
6161

62-
public ApacheHttpClient(Credentials credentials, JsonTransformer jsonTransformer, Map<String, ?> defaultHeaders, ClientConfig.Host proxy, ClientConfig.UsernamePasswordCredentials proxyCreds) {
62+
public ApacheHttpClient(Credentials credentials, JsonTransformer jsonTransformer, Map<String, ?> defaultHeaders, ClientConfig.Host proxy, ClientConfig.UsernamePasswordCredentials proxyCreds, Integer timeoutMs) {
6363
this.credentials = credentials;
6464
this.jsonTransformer = jsonTransformer;
6565
this.defaultHeaders = defaultHeaders;
6666
this.proxy = proxy;
6767
this.proxyCreds = proxyCreds;
68+
RequestConfig.Builder requestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD);
69+
if (timeoutMs != null) {
70+
requestConfig.setConnectionRequestTimeout(timeoutMs);
71+
requestConfig.setConnectTimeout(timeoutMs);
72+
requestConfig.setSocketTimeout(timeoutMs);
73+
}
6874
this.httpClient = (proxy != null)
6975
? HttpClientBuilder.create()
7076
.setProxy(new HttpHost(proxy.getHost(), proxy.getPort()))
71-
.setDefaultRequestConfig(RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build())
77+
.setDefaultRequestConfig(requestConfig.build())
7278
.setDefaultCredentialsProvider((proxyCreds != null)
7379
? new BasicCredentialsProvider() {{
7480
setCredentials(new AuthScope(proxy.getHost(), proxy.getPort()), new UsernamePasswordCredentials(proxyCreds.getUsername(), proxyCreds.getPassword()));
@@ -77,7 +83,7 @@ public ApacheHttpClient(Credentials credentials, JsonTransformer jsonTransformer
7783
.build()
7884
: HttpClientBuilder
7985
.create()
80-
.setDefaultRequestConfig(RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build())
86+
.setDefaultRequestConfig(requestConfig.build())
8187
.build();
8288
}
8389

src/main/java/com/crowdin/client/core/model/ClientConfig.java

+4
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ public class ClientConfig {
2525
* Provide custom http client
2626
*/
2727
private HttpClient httpClient;
28+
/**
29+
* Http request timeout in milliseconds
30+
*/
31+
private Integer httpTimeoutMs;
2832
/**
2933
* Provide custom json transformer
3034
*/

0 commit comments

Comments
 (0)