programming-examples/java/Using Proxy.java

168 lines
5.4 KiB
Java
Raw Normal View History

2019-11-18 13:43:20 +01:00
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.
}
}