Мой проект заключается в создании прокси-кэша и перенаправлении веб-страницы, которую я запрашиваю. Например, если я ввожу и запрашиваю stackoverflow.com, прокси-сервер должен перенаправить меня на youtube.com. Я уже написал несколько строк кода, чтобы сделать это, но они, кажется, не работают. Извините, я никогда раньше не работал с прокси. Проект находится в java и имеет три класса: httprequest и httpresponse, которые являются правильными и proxycache, который является классом, в котором должны быть сделаны изменения. Это должно быть сделано без сервлетов. Заранее спасибо! Вот мой код:
import java.net.*;
import java.io.*;
import java.util.*;
public class ProxyCache {
/** Port for the proxy */
private static int port;
/** Socket for client connections */
private static ServerSocket socket;
/** Create the ProxyCache object and the socket */
public static void init(int p) {
port = p;
try {
socket = new ServerSocket(port);
} catch (IOException e) {
System.out.println("Error creating socket: " + e);
System.exit(-1);
}
}
public static void handle(Socket client) {
Socket server = null;
HttpRequest request = null;
HttpResponse response = null;
/* Process request. If there are any exceptions, then simply
* return and end this thread. This unfortunately means the
* client will hang for a while, until it timeouts. */
/* Read request */
try {
BufferedReader fromClient =
new BufferedReader(new InputStreamReader(client.getInputStream()));
System.out.println("Reading request...");
request = new HttpRequest(fromClient);
System.out.println("Got request...");
} catch (IOException e) {
System.out.println("Error reading request from client: " + e);
return;
}
/* Send request to server */
try {
/* Open socket and write request to socket */
// NQS ESHTE PAGJATURE
//if(request.getHost().include("www.stackoverflow.com")){
// server=new Socket=("www.plagiarism.com", 80);
// NQS ESHTE TIME WASTE
//}else if(request.getHost().include("www.facebook.com")){
// server=new Socket("ajo e yt", 80);
//}else{
server = new Socket(request.getHost(), request.getPort());
//}
DataOutputStream toServer =
new DataOutputStream(server.getOutputStream());
toServer.writeBytes(request.toString());
} catch (UnknownHostException e){
System.out.println("Unknown host: " + request.getHost());
System.out.println(e);
return;
} catch (IOException e) {
System.out.println("Error writing request to server: " + e);
return;
}
/* Read response and forward it to client */
try {
DataInputStream fromServer =
new DataInputStream(server.getInputStream());
//InputStream is = server.getInputStream();
response = new HttpResponse(fromServer);
//response = new HttpResponse(is);
DataOutputStream toClient =
new DataOutputStream(client.getOutputStream());
toClient.writeBytes(response.toString());
toClient.write(response.body);
client.close();
server.close();
/* Insert object into the cache */
/* Fill in (optional exercise only) */
} catch (IOException e) {
System.out.println("Error writing response to client: " + e);
}
}
/** Read command line arguments and start proxy */
public static void main(String args[]) {
int myPort = 0;
try {
myPort = Integer.parseInt(args[0]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Need port number as argument");
System.exit(-1);
} catch (NumberFormatException e) {
System.out.println("Please give port number as integer.");
System.exit(-1);
}
init(myPort);
/** Main loop. Listen for incoming connections and spawn a new
* thread for handling them */
Socket client = null;
while (true) {
try {
client = socket.accept();
System.out.println("Got connection " + client);
handle(client);
//ProxyCacheThread request = new ProxyCacheThread(client);
//request.run();
} catch (IOException e) {
System.out.println("Error reading request from client: " + e);
/* Definitely cannot continue, so skip to next
* iteration of while loop. */
continue;
}
}
}
}