У меня есть рабочий прокси-сервер HTTP.он может правильно обрабатывать веб-сайт, используя только HTTP, а также может подключаться к веб-сайту HTTPS.Он может правильно согласовать запрос клиента CONNECT и начать подключение к целевому серверу.Теперь моя проблема с некоторыми веб-сайтами HTTPS, требующими входа пользователя, такими как Facebook и Yahoo (хотя на некоторых сайтах я могу сделать это успешно).Кажется, я не мог правильно пересылать сообщения, приходящие с обеих сторон. (клиент и сервер)
, что происходит каждый раз, когда я пытаюсь войти на указанный сайт.Браузер ведет себя успешно, он вошел в мою учетную запись, но вместо отображения реальной страницы он возвращается на страницу входа.
вот как работает мой код
// Класс демона
while(true)
{
ConnectionHandler handler = new ConnectionHandler(server.accept());
handler.start();
}
// Класс ConnectionHandler
class ConnectionHandler extends Thread
{
Socket client = null;
Socket server = null;
HTTPRequestHdr request = null;
public ConnectionHandler(Socket socket)
{
client = socket;
request = new HTTPRequestHdr();
}
public void run()
{
try
{
request.parse(client.getInputStream());
server = new Socket(request.url,request.port);
if(request.getMethod().equals("CONNECT");
{
// send 200 message to client then proceed
}
else
{
// send the request to server
}
Tunnel clientToServer = new Tunnel(client,server);
Tunnel ServerToClient = new Tunnel(server,client);
clientToServer.start();
ServerToClient.start();
}catch(Exception e) {}
}
}
// Туннельный класс
class Tunnel extends Thread
{
Socket from = null;
Socket to = null;
public Tunnel(Socket from , Socket to)
{
this.from = from;
this.to = to;
}
public void run()
{
OutputStream toClient = null;
InputStream fromClient = null;
byte[] buffer = new byte[50];
int numberRead = 0;
iny noResponse = 0;
try
{
toClient = to.getOutputStream();
fromClient = fro.getInputStream();
int avail = fromClient.available();
if(avail < 1)
{
Thread.sleep(20);
noResponse += 20;
}
else
{
noResponse = 0;
}
while(avail > 0)
{
numberRead = avail;
numberRead = fromClient.read(buffer,0,numberRead);
toClient.write(buffer,0,numberRead);
toClient.flush();
avail = fromClient.available();
}
if(noResponse > 30000)
{
// close connection
}
}catch(Exception e) {}
}
}
Мне кажется, я не могу правильно переслать данные, поступающие с обеих сторон.подскажите пожалуйста где я не прав и как это исправить?