package com.googlecode.mycontainer.commons.httpclient;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpVersion;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.auth.params.AuthPNames;
import org.apache.http.client.HttpClient;
import org.apache.http.client.params.AuthPolicy;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
public class WebClient {
private DefaultHttpClient client;
private String url = "";
private final Map<String, List<String>> headers = new HashMap<String, List<String>>();
public WebClient() {
client = new DefaultHttpClient();
HttpParams params = client.getParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, "UTF-8");
HttpProtocolParams.setUserAgent(params, "MycontainerWebClient/1.1");
HttpProtocolParams.setUseExpectContinue(params, true);
params.setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BEST_MATCH);
List<String> authpref = new ArrayList<String>();
authpref.add(AuthPolicy.BASIC);
authpref.add(AuthPolicy.DIGEST);
client.getParams().setParameter(AuthPNames.PROXY_AUTH_PREF, authpref);
client.getParams().setIntParameter(CoreConnectionPNames.SO_TIMEOUT,
30000);
// client.getParams().setCookiePolicy(CookiePolicy.RFC_2109);
}
public Map<String, List<String>> getHeaders() {
return headers;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
if (url == null) {
url = "";
}
url = url.trim();
if (url.length() > 0 && !url.endsWith("/")) {
url += "/";
}
this.url = url;
}
public HttpClient getClient() {
return client;
}
public void setClient(DefaultHttpClient client) {
this.client = client;
}
public WebRequest createRequest(RequestMethod method) {
if (RequestMethod.GET.equals(method)) {
return new GetWebRequest(this);
} else if (RequestMethod.POST.equals(method)) {
return new PostWebRequest(this);
}
throw new RuntimeException("Method not supported: " + method);
}
public void setUser(String user, String pass) {
client.getCredentialsProvider().setCredentials(
new AuthScope("localhost", AuthScope.ANY_PORT,
AuthScope.ANY_REALM),
new UsernamePasswordCredentials(user, pass));
// client.getParams().setAuthenticationPreemptive(true);
}
public WebResponse invoke(RequestMethod type, String uri, String... params) {
WebRequest m = createRequest(type);
m.setUri(uri);
for (String param : params) {
int idx = param.indexOf("=");
String key = param.substring(0, idx);
String value = param.substring(idx + 1);
m.addParameter(key, value);
}
return m.invoke();
}
public void addHeader(String name, String header) {
List<String> list = headers.get(name);
if (list == null) {
list = new ArrayList<String>();
headers.put(name, list);
}
list.add(header);
}
public void setTimeout(long timeout) {
client.getParams().setIntParameter(CoreConnectionPNames.SO_TIMEOUT,
(int) timeout);
}
}