Proxy funktioniert nicht so wie gewünscht!

Guten Tag/Abend!
Mein Problem ist folgendes:
Ich habe versucht ein Proxy zu programmieren.
Das Prinzip ist mir klar.
Nur weiß ich nicht wie ich das in meinem Programm schreiben soll.
Den hauptteil habe ich ja schon.

Hier der Code (Bitte auch die Kommentare im Code durchlesen!):
Java:
import java.io.*;
import java.net.*;

public class Main {

    public static void main(String[] args) {
        try {
            int proxyPort = 8080;
            String host = "http://www.google.com";
            ServerSocket ss = new ServerSocket(proxyPort);
            
            while(true) {
                Socket s = ss.accept();
                URLConnection hostConnection = new URL(host).openConnection();
                
                hostConnection.setDoInput(true);
                hostConnection.setDoOutput(true);
                hostConnection.connect();
                
                //Hier weiß ich nicht was ich hier tun soll.
                //Ich kann die Anfragen an den Host weiterleiten.
                //Ich kann nur nicht die Anfragen vom Host an den Client entgegen nehmen.
                //Folgendes Beispiel zum entgegennehmen der Anfragen vom Client:
                
                DataInputStream clientDis = new DataInputStream(s.getInputStream());
                DataOutputStream hostDos = new DataOutputStream(hostConnection.getOutputStream());
                String line = "";
                
                while((line = clientDis.readLine()) != null) {
                    hostDos.writeUTF(line);
                }
                
                //Das nächste Beispiel soll die Anfragen vom Host entgegennehmen.
                
                DataOutputStream clientDos = new DataOutputStream(s.getOutputStream());
                DataInputStream hostDis = new DataInputStream(hostConnection.getInputStream());
                String line = "";
                
                while((line = hostDis.readLine()) != null) {
                    clientDos.writeUTF(line);
                }
                
                //Dies funktioniert aber nicht da ich ein 405 Error kriege.
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
}
Bei allen anderen Versuchen kriege ich ein Fehler/Error in meinem Browser.

Vielen Dank im Voraus!
 
Mit host ist die Zieladresse gemeint, in diesem Fall google.de. Mit statisch ist gemeint, dass sich diese Zieladresse gar nicht ändert... Eigentlich müsste die Anfrage ja so schauen:
Host: www.java-forum.org
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0
Accept: text/css,*/*;q=0.1
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
 
Mit host ist die Zieladresse gemeint, in diesem Fall google.de. Mit statisch ist gemeint, dass sich diese Zieladresse gar nicht ändert... Eigentlich müsste die Anfrage ja so schauen:
Host: www.java-forum.org
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0
Accept: text/css,*/*;q=0.1
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Achso. Danke!
Das gleiche kommt bei mir auch raus aber das löst leider noch nicht mein eigentliches Problem. :confused:
Wenn ich versuche mich zu verbinden dann lädt mein Browser entweder ewig lange oder er bricht sofort mit einem Fehler ab.
 
In jedem Fall dürfte der HOST-Header falsch sein - der Browser wird den (korrigiert mich) auf localhost setze, der Google-Server wird mit localhost aber nicht viel anfangen können. Der Proxy wird das mit dem passenden Host ersetzen müssen.
 
java.io.IOException: Server returned HTTP response code: 405 for URL: http://www.google.com
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at Main.main(Main.java:21)
 
Ahh...du darfst natürlich keine HttpConnection zum Host aufmachen, sondern auch einfach nur ein Socket. Du willst ja die Anfragen des Browsers einfach nur durchreichen, und nicht eine eigene davon völlig unabhängige Verbindung aufbauen.
 
Ich habe es jetzt mal mit einem Socket probiert es gibt jetzt auch keine Exception aber mein Browser lädt ewigkeiten und ich kriege auch von dem Host keine Antwort.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben