/***************************************************************************
* Copyright 2001-2008 The VietSpider All rights reserved. *
**************************************************************************/
package org.vietspider.net.client;
import java.security.MessageDigest;
import org.apache.http.HttpVersion;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.scheme.SocketFactory;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
/**
* Author : Nhu Dinh Thuan
* nhudinhthuan@yahoo.com
* Mar 1, 2008
*/
public class HttpClientFactory {
public final static String USER_AGENT_NAME = "User-Agent";
public final static String USER_AGENT_VALUE = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3";
public final static String CONNECTION_NAME = "Connection";
public final static String CONNECTION_VALUE = "keep-alive";
public final static String ACCEPT_ENCODING_NAME = "Accept-Encoding";
public final static String ACCEPT_ENCODING_VALUE = "gzip,deflate";
public final static String ACCEPT_CHARSET_NAME = "Accept-Charset";
public final static String ACCEPT_CHARSET_VALUE = "UTF-8,*";
public final static String KEEP_ALIVE_NAME = "Keep-Alive";
public final static String KEEP_ALIVE_VALUE = "300";
public final static String ACCEPT_LANGUAGE_NAME = "Accept-Language";
public final static String ACCEPT_LANGUAGE_VALUE = "en-us,en;q=0.5";
public final static String ACCEPT_NAME = "Accept";
public final static String ACCEPT_VALUE = "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,image/*,*/*;q=0.5";
public final static String CACHE_CONTROL_NAME = "Cache-Control";
public final static String CACHE_CONTROL_VALUE ="max-age=0";
public final static String CONTENT_TYPE_NAME ="Content-Type";
public final static String CONTENT_TYPE_VALUE_FORM ="application/x-www-form-urlencoded";
public static int TIMEOUT = 2*60*1000;
public final static String REFERER_NAME = "Referer";
public final static String LOGIN_PROPERTY = "Login";
public final static String HOST_NAME = "Host";
// private final static String HEX_MD5 = "hex_md5";
/*public static AnonymousHttpClient createHttpClient(Proxies proxies) {
SchemeRegistry schemeRegistry = createRegitry();
HttpParams params = createHttpParams();
ClientConnectionManager connectionManager =
new ThreadSafeClientConnManager(params, schemeRegistry);
AnonymousHttpClient client = new AnonymousHttpClient(connectionManager, params);
client.setProxies(proxies);
client.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(3, false));
return client;
}*/
public static DefaultHttpClient createDefaultHttpClient() {
SchemeRegistry schemeRegistry = createRegitry();
HttpParams params = createHttpParams();
// prepare parameters
ClientConnectionManager connectionManager =
new ThreadSafeClientConnManager(params, schemeRegistry);
DefaultHttpClient client = new DefaultHttpClient(connectionManager, params);
client.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(3, false));
return client;
}
private final static SchemeRegistry createRegitry() {
SchemeRegistry schemeRegistry = new SchemeRegistry();
// Register the "http" and "https" protocol schemes, they are
// required by the default operator to look up socket factories.
SocketFactory sf = PlainSocketFactory.getSocketFactory();
schemeRegistry.register(new Scheme("http", sf, 80));
// sf = SSLSocketFactory.getSocketFactory();
SSLSocketFactory ssf = SSLSocketFactory.getSocketFactory();
schemeRegistry.register(new Scheme("https", ssf, 443));
return schemeRegistry;
}
private final static HttpParams createHttpParams() {
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, "UTF-8");
HttpProtocolParams.setUseExpectContinue(params, true);
// HttpConnectionParams.setSoTimeout(params, 60*1000);
// HttpConnectionParams.setConnectionTimeout(params, 60*1000);
// ConnManagerParams.setTimeout(params, 60*1000);
params.setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);
params.setBooleanParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, true);
params.setIntParameter(ClientPNames.MAX_REDIRECTS, 100);
// params.setLongParameter(ClientPNames.conCONNECTION_MANAGER_TIMEOUT, TIMEOUT);
// HttpConnectionManagerParams.setMaxTotalConnections(params, 3000);
return params;
}
public final static String hexMd5(String password) throws Exception {
// System.out.println("===== > "+ password);
MessageDigest algorithm = MessageDigest.getInstance("MD5");
algorithm.reset();
algorithm.update(password.getBytes());
byte messageDigest[] = algorithm.digest();
StringBuffer hexString = new StringBuffer();
for (int i=0;i < messageDigest.length; i++) {
hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
}
return hexString.toString();
}
}