package org.qrone.r7.fetcher;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
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.params.ClientPNames;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.entity.ByteArrayEntity;
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;
public class LocalHTTPFetcher extends HTTPFetcher{
private HttpClient c;
public LocalHTTPFetcher(){
ClientConnectionManager cm = new ThreadSafeClientConnManager();
c = new DefaultHttpClient(cm);
}
@Override
public HTTPResponse request(HTTPRequest request) throws IOException {
HttpUriRequest r = null;
URL url = request.getURL();
try{
if(request.getMethod().toUpperCase().equals("GET")){
r = new HttpGet(url.toURI());
}else{
HttpPost rp = new HttpPost(url.toURI());
rp.setEntity(new ByteArrayEntity(request.getPayload()));
r = rp;
}
}catch (URISyntaxException e) {
throw new IOException(e);
}
Map<String,String> map = request.getHeaders();
if(map != null){
for (Iterator<Map.Entry<String, String>> iter = map.entrySet().iterator(); iter.hasNext();) {
Map.Entry<String, String> entry = iter.next();
r.setHeader(entry.getKey(), entry.getValue());
}
}
HttpParams params = new BasicHttpParams();
params.setBooleanParameter(ClientPNames.HANDLE_REDIRECTS, request.isFollowRedirect());
r.setParams(params);
HttpResponse res = c.execute(r);
map = new HashMap<String, String>();
Header[] heads = res.getAllHeaders();
for (int i = 0; i < heads.length; i++) {
map.put(heads[i].getName(), heads[i].getValue());
}
return new HTTPResponse(res.getEntity().getContent(), map, res.getStatusLine().getStatusCode());
}
}