package org.koroed.lepra; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; 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.methods.HttpUriRequest; import org.apache.http.client.protocol.ClientContext; import org.apache.http.cookie.Cookie; import org.apache.http.impl.client.BasicCookieStore; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.HTTP; import org.apache.http.protocol.HttpContext; import org.apache.http.util.EntityUtils; import org.koroed.lepra.content.parser.LepraContentParser; /** * Author: Nikita Koroed * E-mail: nikita@koroed.org * Date: 14.05.14 * Time: 13:10 */ /** * Author: hexonxons. * E-mail: killgamesh666@gmail.com * Data: 28.08.2014 */ public class LepraHttpClient { // Cookie store. private BasicCookieStore mCookieStore = null; // Http client. private HttpClient mHttpClient = null; // Http context. private HttpContext mContext = null; public LepraHttpClient() { mHttpClient = new DefaultHttpClient(); mCookieStore = new BasicCookieStore(); mContext = new BasicHttpContext(); mContext.setAttribute(ClientContext.COOKIE_STORE, mCookieStore); } public void setCookies(List<Cookie> cookies) { for(Cookie cookie : cookies) { mCookieStore.addCookie(cookie); } } public List<Cookie> getCookies() { return mCookieStore.getCookies(); } public <T> T loadContent(URI uri, LepraContentParser<T> parser) { return loadContent(uri, null, parser); } public <T> T loadContent(URI uri, Map<String, String> formAttributes, LepraContentParser<T> parser) { HttpResponse response = null; try { if(formAttributes != null && formAttributes.size() > 0) { response = mHttpClient.execute(createFormRequest(uri, formAttributes), mContext); } else { HttpGet httpGet = new HttpGet(uri); httpGet.addHeader("Content-Type", "text/html; charset=utf-8"); response = mHttpClient.execute(httpGet, mContext); } } catch(ClientProtocolException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } catch(URISyntaxException e) { e.printStackTrace(); } try { //String content = EntityUtils.toString(response.getEntity(), HTTP.UTF_8); return parser.parseContent(response.getEntity().getContent()); } catch(IllegalStateException e) { e.printStackTrace(); } catch(LepraException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } return null; } private static HttpUriRequest createFormRequest(URI uri, Map<String, String> formAttributes) throws URISyntaxException, UnsupportedEncodingException { ArrayList<NameValuePair> params = new ArrayList<>(); String[] keys = new String[formAttributes.size()]; formAttributes.keySet().toArray(keys); String[] values = new String[formAttributes.size()]; formAttributes.values().toArray(values); for (int i = 0; i < formAttributes.size(); i++) { params.add(new BasicNameValuePair(keys[i], values[i])); } HttpPost request = new HttpPost(uri); request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); return request; } }