I was playing around with Apache commons Http utilities the last day. I used to use the
Here is a sample code which I wrote which takes a URL as input, sets the basic request parameters (e.g. cookie string) and set the proxy settings along with the user credentials.
Note: I was looking for an API set which does make use of its own Socket level implementation. I don’t think
java.net.*
APIs to satisfy my HTTP(s) needs.Here is a sample code which I wrote which takes a URL as input, sets the basic request parameters (e.g. cookie string) and set the proxy settings along with the user credentials.
import org.apache.commons.httpclient.Credentials; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.UsernamePasswordCredentials; import org.apache.commons.httpclient.auth.AuthScope; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.params.HttpMethodParams; public class HttpClientTest { public static void main(String[] args) { HttpClient client = null; GetMethod getMethod = null; int responseCode = -1; byte[] responseStream = null; String urlString = "http://www.facebook.com"; String cookieString = null; try { // Creating the GetMethod instance getMethod = new GetMethod(urlString); // Retries to establish a successful connection the specified number // of times if the initial attempts are not successful. getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(1, false)); getMethod.getParams().setParameter("http.socket.timeout", new Integer(5000)); getMethod.setRequestHeader(new Header("Cookie", "<COOKIE_STRING>")); // Creating an HttpClient instance client = new HttpClient(); // Proxy settings: Configures the proxy host, port & user // credentials and the scope of the credentials. client.getHostConfiguration().setProxy("<HOST>", <PORT>); Credentials credentials = new UsernamePasswordCredentials ("<USERNAME>", "<PASSWORD>"); AuthScope scope = new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT); client.getState().setProxyCredentials(scope, credentials); // Sets the user-agent for the client instance client.getParams().setParameter("http.useragent", "<USER_AGENT>"); // Sends the GET request and gets the response responseCode = client.executeMethod(getMethod); responseStream = getMethod.getResponseBody(); System.out.println("Response Code: " + responseCode); System.out.println("Response Body: \n" + new String(responseStream)); } catch (Exception e) { e.printStackTrace(); } finally { getMethod.releaseConnection(); client = null; } } }
Note: I was looking for an API set which does make use of its own Socket level implementation. I don’t think
HttpClient
got it’s own implementation as it claims to be 100% Java. If you know any API set which performs better than java.net.*
APIs please feel free to share it.
Thanks - your proxy setting code helped me a lot. I was able to connect to local urls but external urls were firewalled.
ReplyDeleteI tried to change it in eclipse.ini - it did not help. I tried to change in debug config - it did not help. Spent the whole day trying to resolve why a simple junit call would not pick any of these values and then i found your code via google!!!
thanks a bunch!
My pleasure, if it did helped you :)
ReplyDelete