com.twilio.http.NetworkHttpClient Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of twilio Show documentation
Show all versions of twilio Show documentation
Twilio Java Helper Library
package com.twilio.http;
import com.twilio.Twilio;
import com.twilio.exception.ApiException;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.client.utils.HttpClientUtils;
import org.apache.http.config.SocketConfig;
import org.apache.http.entity.BufferedHttpEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicHeader;
public class NetworkHttpClient extends HttpClient {
protected final org.apache.http.client.HttpClient client;
private boolean isCustomClient;
/**
* Create a new HTTP Client.
*/
public NetworkHttpClient() {
this(DEFAULT_REQUEST_CONFIG);
}
/**
* Create a new HTTP Client with a custom request config.
*
* @param requestConfig a RequestConfig.
*/
public NetworkHttpClient(final RequestConfig requestConfig) {
this(requestConfig, DEFAULT_SOCKET_CONFIG);
}
/**
* Create a new HTTP Client with a custom request and socket config.
*
* @param requestConfig a RequestConfig.
* @param socketConfig a SocketConfig.
*/
public NetworkHttpClient(final RequestConfig requestConfig, final SocketConfig socketConfig) {
Collection headers = Arrays.asList(
new BasicHeader("X-Twilio-Client", "java-" + Twilio.VERSION),
new BasicHeader(HttpHeaders.ACCEPT, "application/json"),
new BasicHeader(HttpHeaders.ACCEPT_ENCODING, "utf-8")
);
String googleAppEngineVersion = System.getProperty("com.google.appengine.runtime.version");
boolean isGoogleAppEngine = googleAppEngineVersion != null && !googleAppEngineVersion.isEmpty();
org.apache.http.impl.client.HttpClientBuilder clientBuilder = HttpClientBuilder.create();
if (!isGoogleAppEngine) {
clientBuilder.useSystemProperties();
}
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
connectionManager.setDefaultSocketConfig(socketConfig);
connectionManager.setDefaultMaxPerRoute(10);
connectionManager.setMaxTotal(10 * 2);
client = clientBuilder
.setConnectionManager(connectionManager)
.setDefaultRequestConfig(requestConfig)
.setDefaultHeaders(headers)
.setRedirectStrategy(this.getRedirectStrategy())
.build();
}
/**
* Create a new HTTP Client using custom configuration.
* @param clientBuilder an HttpClientBuilder.
*/
public NetworkHttpClient(HttpClientBuilder clientBuilder) {
Collection headers = Arrays.asList(
new BasicHeader("X-Twilio-Client", "java-" + Twilio.VERSION),
new BasicHeader(HttpHeaders.ACCEPT, "application/json"),
new BasicHeader(HttpHeaders.ACCEPT_ENCODING, "utf-8")
);
isCustomClient = true;
client = clientBuilder
.setDefaultHeaders(headers)
.setRedirectStrategy(this.getRedirectStrategy())
.build();
}
/**
* Make a request.
*
* @param request request to make
* @return Response of the HTTP request
*/
public Response makeRequest(final Request request) {
HttpMethod method = request.getMethod();
RequestBuilder builder = RequestBuilder.create(method.toString())
.setUri(request.constructURL().toString())
.setVersion(HttpVersion.HTTP_1_1)
.setCharset(StandardCharsets.UTF_8);
if (request.requiresAuthentication()) {
builder.addHeader(HttpHeaders.AUTHORIZATION, request.getAuthString());
}
for (Map.Entry> entry : request.getHeaderParams().entrySet()) {
for (String value : entry.getValue()) {
builder.addHeader(entry.getKey(), value);
}
}
if (method == HttpMethod.POST) {
builder.addHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded");
for (Map.Entry> entry : request.getPostParams().entrySet()) {
for (String value : entry.getValue()) {
builder.addParameter(entry.getKey(), value);
}
}
}
builder.addHeader(HttpHeaders.USER_AGENT, HttpUtility.getUserAgentString(request.getUserAgentExtensions(), isCustomClient));
HttpResponse response = null;
try {
response = client.execute(builder.build());
HttpEntity entity = response.getEntity();
return new Response(
// Consume the entire HTTP response before returning the stream
entity == null ? null : new BufferedHttpEntity(entity).getContent(),
response.getStatusLine().getStatusCode(),
response.getAllHeaders()
);
} catch (IOException e) {
throw new ApiException(e.getMessage(), e);
} finally {
// Ensure this response is properly closed
HttpClientUtils.closeQuietly(response);
}
}
}