diff --git a/module-client/src/examples/org/apache/http/examples/conn/OperatorConnectDirect.java b/module-client/src/examples/org/apache/http/examples/conn/OperatorConnectDirect.java index d4107c110..45f2e07a2 100644 --- a/module-client/src/examples/org/apache/http/examples/conn/OperatorConnectDirect.java +++ b/module-client/src/examples/org/apache/http/examples/conn/OperatorConnectDirect.java @@ -31,7 +31,6 @@ package org.apache.http.examples.conn; - import org.apache.http.Header; import org.apache.http.HttpHost; import org.apache.http.HttpRequest; @@ -52,7 +51,6 @@ import org.apache.http.protocol.HttpContext; import org.apache.http.protocol.BasicHttpContext; - /** * How to open a direct connection using * {@link ClientConnectionOperator ClientConnectionOperator}. @@ -60,86 +58,17 @@ import org.apache.http.protocol.BasicHttpContext; * The subsequent message exchange in this example should not * be used as a template. * - * - * - * - * @version $Revision$ $Date$ - * * @since 4.0 */ public class OperatorConnectDirect { - /** - * The default parameters. - * Instantiated in {@link #setup setup}. - */ - private static HttpParams defaultParameters; - - /** - * The scheme registry. - * Instantiated in {@link #setup setup}. - */ - private static SchemeRegistry supportedSchemes; - - - /** - * Main entry point to this example. - * - * @param args ignored - */ - public final static void main(String[] args) - throws Exception { - - final HttpHost target = new HttpHost("jakarta.apache.org", 80, "http"); - - setup(); // some general setup - - // one operator can be used for many connections - ClientConnectionOperator scop = createOperator(); - OperatedClientConnection conn = scop.createConnection(); - - HttpRequest req = createRequest(target); - HttpContext ctx = createContext(); - - System.out.println("opening connection to " + target); - scop.openConnection(conn, target, null, ctx, getParams()); - - System.out.println("sending request"); - conn.sendRequestHeader(req); - // there is no request entity - conn.flush(); - - System.out.println("receiving response header"); - HttpResponse rsp = conn.receiveResponseHeader(); - - System.out.println("----------------------------------------"); - System.out.println(rsp.getStatusLine()); - Header[] headers = rsp.getAllHeaders(); - for (int i=0; i - * @version $Revision$ $Date$ - * * @since 4.0 */ public class OperatorConnectProxy { - /** - * The default parameters. - * Instantiated in {@link #setup setup}. - */ - private static HttpParams defaultParameters = null; - - /** - * The scheme registry. - * Instantiated in {@link #setup setup}. - */ - private static SchemeRegistry supportedSchemes; - - - /** - * Main entry point to this example. - * - * @param args ignored - */ - public final static void main(String[] args) - throws Exception { + public static void main(String[] args) throws Exception { // make sure to use a proxy that supports CONNECT - final HttpHost target = - new HttpHost("issues.apache.org", 443, "https"); - final HttpHost proxy = - new HttpHost("127.0.0.1", 8666, "http"); - - setup(); // some general setup - - // one operator can be used for many connections - ClientConnectionOperator scop = createOperator(); - OperatedClientConnection conn = scop.createConnection(); - - HttpRequest req = createRequest(target); - HttpContext ctx = createContext(); - - System.out.println("opening connection to " + proxy); - scop.openConnection(conn, proxy, null, ctx, getParams()); - - HttpRequest connect = createConnect(target); - System.out.println("opening tunnel to " + target); - conn.sendRequestHeader(connect); - // there is no request entity - conn.flush(); - - System.out.println("receiving confirmation for tunnel"); - HttpResponse connected = conn.receiveResponseHeader(); - System.out.println("----------------------------------------"); - printResponseHeader(connected); - System.out.println("----------------------------------------"); - int status = connected.getStatusLine().getStatusCode(); - if ((status < 200) || (status > 299)) { - System.out.println("unexpected status code " + status); - System.exit(1); - } - System.out.println("receiving response body (ignored)"); - conn.receiveResponseEntity(connected); - - // Now we have a tunnel to the target. As we will be creating a - // layered TLS/SSL socket immediately afterwards, updating the - // connection with the new target is optional - but good style. - // The scheme part of the target is already "https", though the - // connection is not yet switched to the TLS/SSL protocol. - conn.update(null, target, false, getParams()); - - System.out.println("layering secure connection"); - scop.updateSecureConnection(conn, target, ctx, getParams()); - - // finally we have the secure connection and can send the request - - System.out.println("sending request"); - conn.sendRequestHeader(req); - // there is no request entity - conn.flush(); - - System.out.println("receiving response header"); - HttpResponse rsp = conn.receiveResponseHeader(); - - System.out.println("----------------------------------------"); - printResponseHeader(rsp); - System.out.println("----------------------------------------"); - - System.out.println("closing connection"); - conn.close(); - - } // main - - - private final static ClientConnectionOperator createOperator() { - return new DefaultClientConnectionOperator(supportedSchemes); - } - - - /** - * Performs general setup. - * This should be called only once. - */ - private final static void setup() { + HttpHost target = new HttpHost("issues.apache.org", 443, "https"); + HttpHost proxy = new HttpHost("127.0.0.1", 8666, "http"); + // some general setup // Register the "http" and "https" protocol schemes, they are // required by the default operator to look up socket factories. - supportedSchemes = new SchemeRegistry(); - SocketFactory sf = PlainSocketFactory.getSocketFactory(); - supportedSchemes.register(new Scheme("http", sf, 80)); - sf = SSLSocketFactory.getSocketFactory(); - supportedSchemes.register(new Scheme("https", sf, 80)); + SchemeRegistry supportedSchemes = new SchemeRegistry(); + supportedSchemes.register(new Scheme("http", + PlainSocketFactory.getSocketFactory(), 80)); + supportedSchemes.register(new Scheme("https", + SSLSocketFactory.getSocketFactory(), 443)); // Prepare parameters. // Since this example doesn't use the full core framework, @@ -183,73 +82,80 @@ public class OperatorConnectProxy { HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setUseExpectContinue(params, false); - defaultParameters = params; - } // setup - - - private final static HttpParams getParams() { - return defaultParameters; - } - - - /** - * Creates a request to tunnel a connection. - * In a real application, request interceptors should be used - * to add the required headers. - * - * @param target the target server for the tunnel - * - * @return a CONNECT request without an entity - */ - private final static HttpRequest createConnect(HttpHost target) { - - // see RFC 2817, section 5.2 - final String authority = target.getHostName()+":"+target.getPort(); - - HttpRequest req = new BasicHttpRequest - ("CONNECT", authority, HttpVersion.HTTP_1_1); - - req.addHeader("Host", authority); - - return req; - } - - - /** - * Creates a request to execute in this example. - * In a real application, request interceptors should be used - * to add the required headers. - * - * @param target the target server for the request - * - * @return a request without an entity - */ - private final static HttpRequest createRequest(HttpHost target) { - - HttpRequest req = new BasicHttpRequest - ("OPTIONS", "*", HttpVersion.HTTP_1_1); + // one operator can be used for many connections + ClientConnectionOperator scop = new DefaultClientConnectionOperator(supportedSchemes); + HttpRequest req = new BasicHttpRequest("OPTIONS", "*", HttpVersion.HTTP_1_1); + // In a real application, request interceptors should be used + // to add the required headers. req.addHeader("Host", target.getHostName()); + + HttpContext ctx = new BasicHttpContext(); - return req; + OperatedClientConnection conn = scop.createConnection(); + try { + System.out.println("opening connection to " + proxy); + scop.openConnection(conn, proxy, null, ctx, params); + + // Creates a request to tunnel a connection. + // For details see RFC 2817, section 5.2 + String authority = target.getHostName() + ":" + target.getPort(); + HttpRequest connect = new BasicHttpRequest("CONNECT", authority, + HttpVersion.HTTP_1_1); + // In a real application, request interceptors should be used + // to add the required headers. + connect.addHeader("Host", authority); + + System.out.println("opening tunnel to " + target); + conn.sendRequestHeader(connect); + // there is no request entity + conn.flush(); + + System.out.println("receiving confirmation for tunnel"); + HttpResponse connected = conn.receiveResponseHeader(); + System.out.println("----------------------------------------"); + printResponseHeader(connected); + System.out.println("----------------------------------------"); + int status = connected.getStatusLine().getStatusCode(); + if ((status < 200) || (status > 299)) { + System.out.println("unexpected status code " + status); + System.exit(1); + } + System.out.println("receiving response body (ignored)"); + conn.receiveResponseEntity(connected); + + // Now we have a tunnel to the target. As we will be creating a + // layered TLS/SSL socket immediately afterwards, updating the + // connection with the new target is optional - but good style. + // The scheme part of the target is already "https", though the + // connection is not yet switched to the TLS/SSL protocol. + conn.update(null, target, false, params); + + System.out.println("layering secure connection"); + scop.updateSecureConnection(conn, target, ctx, params); + + // finally we have the secure connection and can send the request + + System.out.println("sending request"); + conn.sendRequestHeader(req); + // there is no request entity + conn.flush(); + + System.out.println("receiving response header"); + HttpResponse rsp = conn.receiveResponseHeader(); + + System.out.println("----------------------------------------"); + printResponseHeader(rsp); + System.out.println("----------------------------------------"); + + } finally { + System.out.println("closing connection"); + conn.close(); + } } - - /** - * Creates a context for executing a request. - * Since this example doesn't really use the execution framework, - * the context can be left empty. - * - * @return a new, empty context - */ - private final static HttpContext createContext() { - return new BasicHttpContext(null); - } - - private final static void printResponseHeader(HttpResponse rsp) { - System.out.println(rsp.getStatusLine()); Header[] headers = rsp.getAllHeaders(); for (int i=0; i