i am developing a proxy programin java.It works properly for some sites.It doesnt work for some site which enforces SSL or which respond with 302 found. Tell how can i fix that
package miniproject;
import java.io.*;
import java.net.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class SimpleProxyServer extends Thread {
int bytesRead;
PrintWriter out;
Socket client=null;
@Override
public void run() {
try {
int remoteport=80;
int temp=0;
int datalimit=10;
HttpRequest request1=null;
HttpRequest2 request2=null;
InetAddress address=null;
String username=" ";
int userid=0;
ServerSocket ss = new ServerSocket(90);
final byte[] request = new byte[8192];
final byte[] response = new byte[8192];
byte[] reply = new byte[8192];
while (true) {
Socket client = null;
Socket server = null;
client = ss.accept();
try {
String add= client.getInetAddress().toString();
Sqlconnection con=new Sqlconnection();
ResultSet rs=con.select("select * from user where status='online'");
while(rs.next()){
String s = rs.getString("ipaddress");
username=rs.getString("username");
userid=rs.getInt("userid");
if(s.equals(add))
temp=1;
}
rs.close();
con.close();
if(temp==0){
try {
request1 = new HttpRequest(client);
request1.process(add);
}
catch (Exception ex) {
Logger.getLogger(SimpleProxyServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
else {
final InputStream streamFromClient = client.getInputStream();
final OutputStream streamToClient = client.getOutputStream();
bytesRead= streamFromClient.read(request);
String browserRequest = new String(request, 0, bytesRead);
System.out.println("\nFrom client:"+browserRequest);
if(browserRequest.contains("CONNECT")){
String StatusLine="HTTP/1.0 200 OK";
BufferedOutputStream o=new BufferedOutputStream(streamToClient);
o.write(StatusLine.getBytes());
}
Sqlconnection scn=new Sqlconnection();
int end = browserRequest.indexOf('\n');
String url=browserRequest.substring(0,end);
scn.update("INSERT INTO userlog VALUES('"+username+"','"+url+"', CURRENT_TIME, CURRENT_DATE, "+userid+"); ");
scn.close();
int start = browserRequest.indexOf("Host: ") + 6;
end = browserRequest.indexOf('\n', start);
String host = browserRequest.substring(start, end - 1);
System.out.println("\nConnecting to host: " + host);
try {
server = new Socket(host,80);
}
catch (IOException e) {
out = new PrintWriter(streamToClient);
out.print("Proxy server cannot connect to " + host + ":"
+ remoteport + ":\n" + e + "\n");
out.flush();
client.close();
continue;
}
System.out.println("connection established");
final InputStream streamFromServer = server.getInputStream();
final OutputStream streamToServer = server.getOutputStream();
Thread t;
t = new Thread() {
@Override
public void run() {
try {
streamToServer.write(request, 0, bytesRead);
streamToServer.flush();
System.out.println("\nto server:"+new String(request, 0, bytesRead));
while ((bytesRead = streamFromClient.read(request)) != -1) {
streamToServer.write(request, 0, bytesRead);
streamToServer.flush();
}
} catch (IOException e) {
System.err.println(e);
}
}
};
t.start();
try {
while ((bytesRead = streamFromServer.read(reply)) != -1) {
streamToClient.write(reply, 0, bytesRead);
streamToClient.flush();
System.out.println("\nWriting to client:\n"+new String(reply, 0, bytesRead));
}
} catch (IOException e) {
System.err.println(e);
}
}
} catch (IOException e) {
System.err.println("\nerror:\n"+e);
} catch (SQLException ex) {
Logger.getLogger(SimpleProxyServer.class.getName()).log(Level.SEVERE, null, ex);
} catch (Exception ex) {
Logger.getLogger(SimpleProxyServer.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
if (server != null)
server.close();
if (client != null)
client.close();
} catch (IOException e) {
System.err.println(e);
}
}
}
} catch (IOException ex) {
Logger.getLogger(SimpleProxyServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}