I do not believe that Http Components provides any helper classes for CONNECT methods. You'll need to handle this yourself by making the correct TCP/IP call out inside the handle method.
Bill- On Thu, Nov 10, 2011 at 6:21 PM, steve labar <[email protected]> wrote: > I’m trying to use HTTPClient and HTTPCORE to create a client/server so I > can create my own proxy to see traffic coming from browser to the server > and back. I have setup everything and have http traffic working fairly > well. My problem is that when in the browser I switch to https the browser > sends a CONNECT request. This request gets sent to my HTTPServer class > where I have a HTTPService.handleRequest() which sends it to my > DefaultHttpRequestHandler. > Once here it gets sent to the handle(HttpRequest request, HttpResponse > response,HttpContext context) method where I have HttpClient set and ready > to make the requests. Problem is do I need to look for the Connect in the > server class and handle myself. I thought maybe there was a helper class or > something to handle this tunneling process? > > > Code Examples: > > > ===================== Server Code Chunks ======================== > > { This is the server listener which listens for an http request from a > specified port} > > RequestListenerThread extends Thread{ > > ... > > public void run() { > System.out.println("Listening on port " > + serversocket.getLocalPort()); > while (!Thread.interrupted()) { > try { > // Set up HTTP connection > Socket socket = serversocket.accept(); > > DefaultHttpServerConnection conn = new > DefaultHttpServerConnection(); > System.out.println("Incoming connection from " > + socket.getInetAddress()); > conn.bind(socket, this.params); > > // Start worker thread > Thread t = new WorkerThread(this.httpService, conn); > t.setDaemon(true); > t.start(); > } catch (InterruptedIOException ex) { > break; > } catch (IOException ex) { > System.err > .println("I/O error initialising connection > thread: " > + ex.getMessage()); > ex.printStackTrace(); > break; > } > } > > > ... > > } > > > (This is where http request gets sent to the request handler > > static class WorkerThread extends Thread { > > private final HttpService httpservice; > private final HttpServerConnection conn; > > public WorkerThread(final HttpService httpservice, > final HttpServerConnection conn) { > super(); > this.httpservice = httpservice; > this.conn = conn; > } > > public void run() { > System.out.println("New connection thread"); > HttpContext context = new BasicHttpContext(null); > try { > while (!Thread.interrupted() && this.conn.isOpen()) { > this.httpservice.handleRequest(this.conn, context); > > } > } catch (ConnectionClosedException ex) { > System.err.println("Client closed connection"); > } catch (IOException ex) { > System.err.println("I/O error: " + ex.getMessage()); > ex.printStackTrace(); > } catch (HttpException ex) { > System.err.println("Unrecoverable HTTP protocol violation: " > + ex.getMessage()); > } finally { > try { > this.conn.shutdown(); > } catch (IOException ignore) { > } > } > } > > } > > > > ======================================= > > > ============= HTTP REQUEST Handler ================= > > ...... > > public void handle(HttpRequest request, HttpResponse response, > HttpContext context) throws HttpException, IOException { > > System.out.println(request); > RequestLine reqLine = request.getRequestLine(); > if(reqLine.getMethod().equalsIgnoreCase("CONNECT")) > { > response.setEntity(new BufferedHttpEntity(new > StringEntity("HTTP/1.0 200 Connection established\r\nProxy-agent: proxy > agentt\r\n\r\n"))); > } > else > { > try { > > HttpResponse clientResponse = null; > > HttpEntity entity = null; > > clientResponse = httpClient.execute(new > RequestWrapper(request)); > > entity = clientResponse.getEntity(); > > if (entity != null) { > response.setEntity(new BufferedHttpEntity(entity)); > } > } catch (Exception e) { > System.err.println(e.getMessage()); > e.printStackTrace(); > } > > } > // finally { > // // When HttpClient instance is no longer needed, > // // shut down the connection manager to ensure > // // immediate deallocation of all system resources > // httpClient.getConnectionManager().shutdown(); > // > // } > > } > > > ........ > > Regards, > > > Steve > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
