Как перенаправить веб-страницу с помощью прокси без сервлета в java? - PullRequest
1 голос
/ 17 января 2020

Мой проект заключается в создании прокси-кэша и перенаправлении веб-страницы, которую я запрашиваю. Например, если я ввожу и запрашиваю 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;
        }
    }

    }
} 
...