Client IP festlegen bei HttpURLConnection

Mindwinder

Mitglied
Hi alle zusammen,
in der Klasse Socket ist ja möglich einen Konstruktor derart zu wählen, dass das Programm einen Socket an ein bestimmtes lokales Netzwerkinterface (spezielle Ip und Port) auf eigener Seite bindet. z.B.:

Socket(String host, int port, InetAddress localAddr, int localPort)
Creates a socket and connects it to the specified remote host on the specified remote port.

Wie ist es denn möglich die abgehende IP festzulegen wenn ich eine Anfrage mittels Typ HttpURLConnection verwende? Gibt es dafür irgendeine set.Property Option?

Nette Grüße,

Mindwinder
 
Moin!
Ich weis net, obs nicht noch umständlicher geht ;) , aber wenn du einen eigenen URLStreamHandler implementierst, kannst du da ja die entsprechende IP zurückgeben.
Den URLStreamHandler übergibst du dem Konstruktor der URL zu der du dich verbinden willst, und mit openConnection() bekommst du ja dann die Verbindung.
Zumindest mal theoretisch. Getestet hab ich das nicht :).

*grüssle*
MeinerEiner
 
Hi,
sehe dabei leider grade nicht wie ich weiterkomme - mein System hat zwei Ethernet Schnittstellen - das Problem liegt nicht beim Connect zum Server - vielmehr möchte ich ja definieren über welche Schnittstelle / IP mein Request rausgeht.

Gruß,

Mindwinder
 
Mir ist schon klar was du meinst...
Es geht aber wohl auch einfacher wie ich gerade sehe..
schau dir mal den jakarta httpclient an: http://jakarta.apache.org/commons/httpclient/
Da gibt es die klasse HostConfiguration, wo du wohl alles gewünschte einstellen kannst.
Mit dieser kannst du dir dann eine HttpConnection basteln....

*grüssle*
MeinerEiner
 
Hi,
das erscheint mir irgendwie zu umständlich um einmal eine Datei von einem Webserver einzulesen - gehen wir doch zurück zum Socket - wenn ich einfach einen Stream GET /vz/file.txt sende klappt das nicht - erhalte einen 404 File Not Found zurück - muß ich meinen Stream für einen eigenen http-Request speziell kodieren damit das klappt, oder muß ich noch weitere Angaben in meiner Anfrage machen?

Gruß Mindwinder
 
Moin!
Sonderzeichen oder Umlaute müssen entsprechend kodiert werden,.. aber sonst sollte es ohne probleme gehen..
Dein Fehler scheint woanders zu liegen...
Hier mal ein kleines Beispiel, welches die Startseite von Tutorials.de in einer lokalen Datei abspeichert:
Code:
try {
                    URL url = new URL("http://www.tutorials.de/");
                    FileOutputStream fileWriter = new    FileOutputStream("e:/tutorials.txt");           
                    Socket socket = new Socket(url.getHost(), 80,InetAddress.getLocalHost(),80);
                    InputStream input = socket.getInputStream();
                    PrintWriter output = new PrintWriter(socket.getOutputStream());
                    output.println("GET "+url.getFile());
                    output.flush();
                    byte[] buffer = new byte[4096];
                    int read;
            
                    while((read =  input.read(buffer)) != -1){ 
                        fileWriter.write(buffer, 0, read);             
                    }        
                    socket.close();
                    fileWriter.close();

            } catch(Exception ex) {
                   ex.printStackTrace();
            }
                    
             
        }


*grüssle*
MeinerEiner
 
Zuletzt bearbeitet von einem Moderator:
Genau so hatte ich das auch gedacht - nur scheint der Webserver zu unterscheiden zwischen echtem Client und unserem kleinen Prog - über die Jakarta Klassen bekomme ich die Inhalte ordnungsgemäß - hatte auch schon versucht nen schnöden User-Agent einfach mit zu senden, klappte aber auch nicht - nach GET mußte die komplette URL folgen dann gings :) - Aber danke für deine Mühen.

Gruß Mindwinder
 
Genau so hatte ich das auch gedacht - nur scheint der Webserver zu unterscheiden zwischen echtem Client und unserem kleinen Prog - über die Jakarta Klassen bekomme ich die Inhalte ordnungsgemäß - hatte auch schon versucht nen schnöden User-Agent einfach mit zu senden, klappte aber auch nicht - nach GET mußte die komplette URL folgen dann gings :eek: - Aber danke für deine Mühen.

Gruß Mindwinder
 
Zurück