package net.londatiga.android.twitter.http;
import java.io.InputStream;
import java.util.List;
import net.londatiga.android.twitter.oauth.OauthAccessToken;
import net.londatiga.android.twitter.oauth.OauthConsumer;
import net.londatiga.android.twitter.oauth.OauthHeader;
import net.londatiga.android.twitter.oauth.OauthSignature;
import net.londatiga.android.twitter.oauth.OauthUtil;
import net.londatiga.android.twitter.util.Debug;
import net.londatiga.android.twitter.util.StringUtil;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
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.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
/**
* Http connection with Twiter API.
*
* @author Lorensius W. L. T <lorenz@londatiga.ent>
*
*/
public class HttpConn {
private OauthConsumer mOauthConsumer;
private OauthAccessToken mAcessToken;
public static final String REQUEST_POST = "POST";
public static final String REQUEST_GET = "GET";
public HttpConn(OauthConsumer consumer, OauthAccessToken acessToken) {
mOauthConsumer = consumer;
mAcessToken = acessToken;
}
public String connectPost(String requestUri, List<NameValuePair> params) throws Exception {
String response = "";
InputStream stream = null;
try {
HttpParams httpParams = new HttpParams();
String nonce = OauthUtil.createNonce();
String timestamp = OauthUtil.getTimeStamp();
httpParams.put("oauth_consumer_key", new HttpValues(mOauthConsumer.getConsumerKey()));
httpParams.put("oauth_nonce", new HttpValues(nonce));
httpParams.put("oauth_signature_method", new HttpValues(OauthUtil.SIGNATURE_METHOD));
httpParams.put("oauth_timestamp", new HttpValues(timestamp));
httpParams.put("oauth_token", new HttpValues(mAcessToken.getToken()));
httpParams.put("oauth_version", new HttpValues(OauthUtil.OAUTH_VERSION));
if (params != null) {
int size = params.size();
for (int i = 0; i < size; i++) {
BasicNameValuePair param = (BasicNameValuePair) params.get(i);
httpParams.put(param.getName(), new HttpValues(param.getValue()));
}
}
OauthSignature reqSignature = new OauthSignature();
String sigBase = reqSignature.createSignatureBase(REQUEST_POST, requestUri, httpParams.getQueryString());
String signature = reqSignature.createRequestSignature(sigBase, mOauthConsumer.getConsumerSecret(), mAcessToken.getSecret());
String authHeader = OauthHeader.buildRequestHeader(
mOauthConsumer.getConsumerKey(),
nonce,
signature,
OauthUtil.SIGNATURE_METHOD,
timestamp,
mAcessToken.getToken(),
OauthUtil.OAUTH_VERSION);
Debug.i("Signature base " + sigBase);
Debug.i("Signature " + signature);
Debug.i("POST " + requestUri);
Debug.i("Authorization " + authHeader);
java.util.logging.Logger.getLogger("org.apache.http.wire").setLevel(java.util.logging.Level.FINEST);
java.util.logging.Logger.getLogger("org.apache.http.headers").setLevel(java.util.logging.Level.FINEST);
System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", "debug");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http", "debug");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.headers", "debug");
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(requestUri);
httpPost.addHeader("Authorization", authHeader);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
HttpEntity httpEntity = httpResponse.getEntity();
if (httpEntity == null) {
throw new Exception("Return value is empty");
}
stream = httpEntity.getContent();
response = StringUtil.streamToString(stream);
Debug.i("Response " + response);
} else {
throw new Exception(httpResponse.getStatusLine().getReasonPhrase());
}
} catch (Exception e) {
throw e;
} finally {
if (stream != null) {
stream.close();
}
}
return response;
}
public String connectGet(String requestUri, List<NameValuePair> params) throws Exception {
String response = "";
InputStream stream = null;
try {
HttpParams httpParams = new HttpParams();
String nonce = OauthUtil.createNonce();
String timestamp = OauthUtil.getTimeStamp();
httpParams.put("oauth_consumer_key", new HttpValues(mOauthConsumer.getConsumerKey()));
httpParams.put("oauth_nonce", new HttpValues(nonce));
httpParams.put("oauth_signature_method", new HttpValues(OauthUtil.SIGNATURE_METHOD));
httpParams.put("oauth_timestamp", new HttpValues(timestamp));
httpParams.put("oauth_token", new HttpValues(mAcessToken.getToken()));
httpParams.put("oauth_version", new HttpValues(OauthUtil.OAUTH_VERSION));
String requestUrl = requestUri;
if (params != null) {
StringBuilder requestParamSb = new StringBuilder();
int size = params.size();
for (int i = 0; i < size; i++) {
BasicNameValuePair param = (BasicNameValuePair) params.get(i);
httpParams.put(param.getName(), new HttpValues(param.getValue()));
requestParamSb.append(param.getName() + "=" + param.getValue() + ((i != size-1) ? "&" : ""));
}
String requestParam = requestParamSb.toString();
requestUrl = requestUri + ((requestUri.contains("?")) ? "&" + requestParam : "?" + requestParam);
}
OauthSignature reqSignature = new OauthSignature();
String sigBase = reqSignature.createSignatureBase(REQUEST_GET, requestUri, httpParams.getQueryString());
String signature = reqSignature.createRequestSignature(sigBase, mOauthConsumer.getConsumerSecret(), mAcessToken.getSecret());
String authHeader = OauthHeader.buildRequestHeader(
mOauthConsumer.getConsumerKey(),
nonce,
signature,
OauthUtil.SIGNATURE_METHOD,
timestamp,
mAcessToken.getToken(),
OauthUtil.OAUTH_VERSION);
Debug.i("Signature base " + sigBase);
Debug.i("Signature " + signature);
Debug.i("GET " + requestUrl);
Debug.i("Authorization " + authHeader);
java.util.logging.Logger.getLogger("org.apache.http.wire").setLevel(java.util.logging.Level.FINEST);
java.util.logging.Logger.getLogger("org.apache.http.headers").setLevel(java.util.logging.Level.FINEST);
System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", "debug");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http", "debug");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.headers", "debug");
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(requestUrl);
httpGet.addHeader("Authorization", authHeader);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
if (httpEntity == null) {
throw new Exception("Return value is empty");
}
stream = httpEntity.getContent();
response = StringUtil.streamToString(stream);
Debug.i("Response " + response);
if (httpResponse.getStatusLine().getStatusCode() != 200) {
throw new Exception(httpResponse.getStatusLine().getReasonPhrase());
}
} catch (Exception e) {
throw e;
} finally {
if (stream != null) {
stream.close();
}
}
return response;
}
}