package com.whatscloud.utils.networking;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.protocol.ClientContext;
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.ssl.SSLSocketFactory;
import org.apache.http.impl.client.BasicCookieStore;
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.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
import java.util.List;
public class HTTP
{
static boolean mInitialized;
public static HttpContext mLocalContext;
public static BasicCookieStore mCookieContainer;
public static void initializeContext()
{
//---------------------------------
// Prevent re-initialization
//---------------------------------
mInitialized = true;
//---------------------------------
// Create singleton http context
//---------------------------------
mLocalContext = new BasicHttpContext();
//---------------------------------
// Set up context with cookies
//---------------------------------
mLocalContext.setAttribute(ClientContext.COOKIE_STORE, mCookieContainer);
}
public static String get(String url)
{
//---------------------------------
// Initialize cookie store
//---------------------------------
if ( !mInitialized )
{
initializeContext();
}
//---------------------------------
// Get custom http client
//---------------------------------
HttpClient client = getHTTPClient();
//---------------------------------
// Create Get request
//---------------------------------
HttpGet getRequest = new HttpGet( url );
//---------------------------------
// Add custom user agent
//---------------------------------
getRequest.addHeader("User-Agent", com.whatscloud.config.networking.HTTP.USER_AGENT);
//---------------------------------
// Temporary variable for response
//---------------------------------
String response = "";
try
{
//---------------------------------
// Execute the request
//---------------------------------
HttpResponse getResponse = client.execute(getRequest, mLocalContext);
//-------------------------------------
// Convert the Bytes read to a string
//-------------------------------------
response = EntityUtils.toString(getResponse.getEntity());
}
catch (Exception exc)
{
//---------------------------------
// Return empty string
//---------------------------------
return "";
}
//---------------------------------
// Dispose of connection manager
//---------------------------------
client.getConnectionManager().shutdown();
//---------------------------------
// Return string response
//---------------------------------
return response;
}
public static String post(String url, List<NameValuePair> postData)
{
//----------------------------------------
// Create a new default HttpClient
//----------------------------------------
HttpClient client = getHTTPClient();
//-------------------------------------
// Create a new post request
//-------------------------------------
HttpPost postRequest = new HttpPost( url );
//------------------------------
// Use our personal user-agent
//------------------------------
postRequest.addHeader("User-Agent", com.whatscloud.config.networking.HTTP.USER_AGENT);
//------------------------------
// Response variable
//------------------------------
String response = "";
try
{
//------------------------------
// Set data encoding as UTF-8
//------------------------------
postRequest.setEntity(new UrlEncodedFormEntity(postData, "UTF-8"));
//----------------------------
// Execute HTTP Post Request
//----------------------------
HttpResponse postResponse = client.execute(postRequest, mLocalContext);
//-------------------------------------
// Convert the Bytes read to a string
//-------------------------------------
response = EntityUtils.toString(postResponse.getEntity());
}
catch (Exception exc)
{
//---------------------------------
// Return nothing
//---------------------------------
return "";
}
//-------------------------------------
// Dispose the client connection
//-------------------------------------
client.getConnectionManager().shutdown();
//-------------------------------------
// Return response string
//-------------------------------------
return response;
}
public static DefaultHttpClient getHTTPClient()
{
try
{
//---------------------------------
// Create HTTP params object
//---------------------------------
HttpParams parameters = new BasicHttpParams();
//---------------------------------
// Set to HTTP 1.1
//---------------------------------
HttpProtocolParams.setVersion(parameters, HttpVersion.HTTP_1_1);
//---------------------------------
// Create scheme registry
//---------------------------------
SchemeRegistry registry = new SchemeRegistry();
//---------------------------------
// Allow http/https requests
//---------------------------------
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
//---------------------------------
// Create thread-safe manager
//---------------------------------
ClientConnectionManager connectionManager = new ThreadSafeClientConnManager(parameters, registry);
//---------------------------------
// Return customized manager
//---------------------------------
return new DefaultHttpClient(connectionManager, parameters);
}
catch (Exception exc)
{
//---------------------------------
// Failed? Return default client
//---------------------------------
return new DefaultHttpClient();
}
}
}