Using Proxy import java.net.URL; import java.net.URLConnection; import java.net.HttpURLConnection; import java.io.InputStream; import java.io.BufferedReader; import java.io.InputStreamReader; public class ProxyDemo { // Set to true if you want to see verbose output. private final static boolean bDebug = false; /** * This function makes an HTTP GET request of the specified URL using a proxy if provided. * If successfully, the HTTP response headers are printed out. * If the MIME type of the response is text/html, then the number of lines of text * is printed as well. * * @param strURL - A string representing the URL to request, eg, "http://bdn.borland.com/" * @param strProxy - A string representing either the IP address or host name of the proxy server. * @param iProxyPort - An integer that indicates the proxy port or -1 to indicate the default port for the protocol. * @return rc is true if the request succeeded and false otherwise. */ static boolean doURLRequest(String strURL, String strProxy, int iProxyPort) { boolean rc = false; URL url = null; URLConnection c = null; try { System.out.println("\nHTTP Request: " + strURL); URL urlOriginal = new URL(strURL); if ((null != strProxy) && (0 < strProxy.length())) { URL urlProxy = new URL(urlOriginal.getProtocol(), strProxy, iProxyPort,// A value of -1 means use the default port for the specified protocol. strURL);// The original URL is passed as "the file on the host". System.out.println("Using Proxy: " + strProxy); if (-1 != iProxyPort) { System.out.println("Using Proxy Port: " + iProxyPort); } url = urlProxy; } else { url = urlOriginal; } c = url.openConnection(); // In this example, we only consider HTTP connections. if (c instanceof HttpURLConnection)// instanceof returns true only if the object is not null. { HttpURLConnection h = (HttpURLConnection) c; h.connect(); String strStatus = h.getResponseMessage() + " (" + h.getResponseCode() + ")"; System.out.println("HTTP Status: " + strStatus); System.out.println("HTTP Response Headers: "); // Evidently, index 0 always returns null, so we start with index 1. for (int i = 1; ; i++) { String strKey = h.getHeaderFieldKey(i); if (null == strKey) { break; } System.out.println(i + ": " + strKey + ": " + h.getHeaderField(i)); } // Normally at this point, one would download data from the connection. // For example, if the MIME type is html, then download the string and display it. String strContentType = h.getContentType(); if ((null != strContentType) && (0 == strContentType.compareTo("text/html"))) { // Set boolean bDebug to true if you want verbose output. // For simplicity's sake, we just count the number of lines of text. if (bDebug) System.out.println("Received text/html:["); int iNumLines = 0; try { InputStream in = h.getInputStream(); BufferedReader data = new BufferedReader(new InputStreamReader(in)); String line = null; while((line = data.readLine()) != null) { if (bDebug) System.out.println(line); iNumLines++; } } catch(Exception exc2) { System.out.println("**** IO failure: " + exc2.toString()); } finally { if (bDebug) System.out.println("]"); System.out.println("Received text/html has " + iNumLines + " lines"); } } h.disconnect(); } else { System.out.println("**** No download: connection was not HTTP"); } rc = true; } // Catch all exceptions. catch(Exception exc) { System.out.println("**** Connection failure: " + exc.toString()); // System.out.println("**** Connection failure: " + exc.getMessage());// Same as above line but without the exception class name. } finally { // Do cleanup here. // For example, the following, in theory, could make garbage collection more efficient. // This might be the place where you choose to put your method call to your connection's "disconnect()"; // curiously, while every URLConnection has a connect() method, they don't necessarily have a disconnect() method. // HttpURLConnection has a disconnect() which is called above. c = null; url = null; return rc; } } public static void main(String[] args) { // Simple request, not using a proxy server. ProxyDemo.doURLRequest("http://www.borland.com/", null, -1); ProxyDemo.doURLRequest("http://www.borland.com", null, -1); // Request, using a proxy server. /** * @todo: Note that the proxy indicated below will fail. Change to a valid server. * (If you do not have a proxy server available, then search for a web site that * lists public HTTP proxy servers. * I hesitate to list any here as I'm not sure about the "legitimacy" of all these sites.) */ // *** If you don't change the proxy setting to something valid in the following, // then you will get the following error message: // **** Connection failure: java.net.BindException: Cannot assign requested address: connect ProxyDemo.doURLRequest("http://www.borland.com/", "0.0.0.0", -1); // **** Change this line to use a valid proxy. } }