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);