com.netease.stream.http.HttpClientFactory Maven / Gradle / Ivy
package com.netease.stream.http;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import com.netease.stream.config.ClientConfiguration;
/** Responsible for creating and configuring instances of Apache HttpClient4. */
public class HttpClientFactory {
/**
* Creates a new HttpClient object using the specified ClientConfiguration to configure the
* client.
*
* @param config Client configuration options (ex: proxy settings, connection limits, etc).
* @return The new, configured HttpClient.
*/
public HttpClient createHttpClient(ClientConfiguration config) {
/* Form User-Agent information */
String userAgent = config.getUserAgent();
if (!(userAgent.equals(ClientConfiguration.DEFAULT_USER_AGENT))) {
userAgent += ", " + ClientConfiguration.DEFAULT_USER_AGENT;
}
/* Set HTTP client parameters */
HttpParams httpClientParams = new BasicHttpParams();
HttpProtocolParams.setUserAgent(httpClientParams, userAgent);
HttpConnectionParams.setConnectionTimeout(httpClientParams, config.getConnectionTimeout());
HttpConnectionParams.setSoTimeout(httpClientParams, config.getSocketTimeout());
HttpConnectionParams.setStaleCheckingEnabled(httpClientParams, true);
HttpConnectionParams.setTcpNoDelay(httpClientParams, true);
int socketSendBufferSizeHint = config.getSocketBufferSizeHints()[0];
int socketReceiveBufferSizeHint = config.getSocketBufferSizeHints()[1];
if (socketSendBufferSizeHint > 0 || socketReceiveBufferSizeHint > 0) {
HttpConnectionParams.setSocketBufferSize(httpClientParams,
Math.max(socketSendBufferSizeHint, socketReceiveBufferSizeHint));
}
/* Set connection manager */
ThreadSafeClientConnManager connectionManager =
ConnectionManagerFactory
.createThreadSafeClientConnManager(config, httpClientParams);
DefaultHttpClient httpClient = new DefaultHttpClient(connectionManager, httpClientParams);
return httpClient;
}
}