ssl - How can a java proxy handle "https" requests to multiple hosts? -


i trying make proxy server in java , able make working proxy handles http requests properly. after searching lot able extend program https requests following answer similar question: https://stackoverflow.com/a/9389125/5309299

here's code after tcp connection established between client , proxy:

string request = ""; byte[] requestbytearr;  //read complete request while(true){     string requestline = bufferedreaderfromclient.readline() + "\r\n";      if (requestline.trim().length()==0 && !request.equals("")){         request+=requestline;         requestbytearr = request.getbytes();         system.out.println(request);         break;     } else {         request+=requestline;     } } string hostname = gethostfromrequest(request); int remoteport = getremoteportfromrequest(request); if (request.startswith("connect")){     //establish connection between host , proxy     final socket hostsocket = new socket(hostname, remoteport);      //tell client connection successful     string statusline = "http/1.1 200 connection established \n" + "proxy-agent: proxyserver/1.0\n" + "\r\n";     outtoclient.write(statusline.getbytes());     outtoclient.flush();      //new thread handle incoming responses host     new thread(){         public void run(){             try{                 inputstream infromhost = hostsocket.getinputstream();                 while(true){                     byte[] bufread = new byte[128];                     int bytes_received;                     while ((bytes_received = infromhost.read(bufread)) > 0){                         outtoclient.write(bufread, 0, bytes_received);                         outtoclient.flush();                     }                 }              } catch (ioexception e){                  e.printstacktrace();              }          }     }.start();      //main thread handles incoming requests client     outputstream outtohost = hostsocket.getoutputstream();     while (true){         byte[] bufread = new byte[128];         int bytes_received;         while ((bytes_received = infromclient.read(bufread)) > 0){             outtohost.write(bufread, 0, bytes_received);             outtohost.flush();         }     } } 

obviously, works 1 host, i.e. when client (e.g. chrome browser) sends connect request 1 host (e.g. "www.google.com:443"). want client able connect multiple hosts. problem since requests come after connect request encrypted, proxy server not able determine request meant host, cannot forward requests.


Comments

Popular posts from this blog

mysql - Dreamhost PyCharm Django Python 3 Launching a Site -

java - Sending SMS with SMSLib and Web Services -

java - How to resolve The method toString() in the type Object is not applicable for the arguments (InputStream) -