# Java Netzwerkverbindung über Proxy



## Thomas Darimont (24. Oktober 2004)

Hallo!

Wenn ihr mit java eine Netzwerkverbidnung über einen Proxy aufbauen wollt könnt ihr das folgendermaßen machen:

Entweder gebt ihr die Proxy Properties der Java Laufzeitumgebung über die Konsole als Parameter mit 

```
java -DproxySet=true -DproxyHost=proxy -DproxyPort=8080 MyApp
```

oder 

ihr setzt in eurem Programm die Einstellungen mittels:

```
System.setProperty("proxyPort","8080");
System.setProperty("proxyHost","proxy");
...
```

HTH
Gruß Tom


----------



## takidoso (27. Oktober 2004)

Halli und hallo,
mal ne Frage... gilt das auch für eigene Socket-Anwendungen oder ist dieser Hinweis mehr für High-Level Netzwerk-Programme gedacht (z.B. Soap etc.) ?
Wenn ja, wie funktioniert das eigetnlich dann intern?

mit fragenden Grüßen

Takidoso


----------



## Thomas Darimont (29. Oktober 2004)

Hallo!

Ich denke das gilt für alle Socket Vebindungen und alle darauf fußenden Varianten.
Zu den Interna kann ich nicht viel sagen, da müßte man mal in der JVM Spezifikation nachschauen was dort über Sockets gesagt wird.

gruß Tom


----------



## qde (8. März 2006)

Hallo,
System.setProperty funktioniert bei mir leider genausowenig als die Angabe des Proxys beim Programmaufruf. 

Es sei denn ich mache etwas verkehrt:


```
start javaw -DproxySet=true -DproxyHost=147.154.145.40 -DproxyPort=8080 -classpath TicketFinder.jar;jl1.0.jar;mp3.jar;mysql.jar ticketfinder.TicketFinder12
```
Die IP-Adresse ist in diesem Falle fiktiv. 
con.isUsingProxy() gibt false zurück und darauf folgt dann eine Exception, die wie folgt aussieht: 
java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
usw...


----------



## Thomas Darimont (8. März 2006)

Hallo!

Kann es sein, dass dein proxy eine Authentifizierung erfordert?
Dann versuchs mal noch damit:

```
System.setProperty( "http.proxyUser", "benutzer" );
System.setProperty( "http.proxyPassword", "passwort" );
```

Gruß Tom


----------



## qde (8. März 2006)

Nein, leider ist keine Authentifizierung notwendig.


----------



## Thomas Darimont (8. März 2006)

Hallo!

Also ich kann bestätigen, dass diese Optionen bei normalen Anwendungen funktionieren. 
Was machst du denn konkret in diesem Fall und an welcher Klasse ist denn diese isUsingProxy()  Methode Implementiert? Hab gerade mal über das JDK gegreped (Java 5 als auch java 6) und dabei nichts dergleichen gefunden... verwendest du da irgend eine Third Party Lib? 

Gruß Tom


----------



## qde (8. März 2006)

Hallo,
Sorry, ich meinte die Methode .usingProxy() von der Klasse HttpURLConnection (java.net.HttpURLConnection). 
Ich verwende bei meiner Anwendung einen TimerTask (java.util.TimerTask). Vielleicht liegt es ja daran? 
Unter dem folgenden Link habe ich mal alle wichtigen Stellen der Anwendung hineinkopiert:
nopaste
Ich wäre dir sehr dankbar, wenn du eine Idee hast.


----------



## Thomas Darimont (8. März 2006)

Hallo!

Dann sag doch gleich, dass du usingProxy() statt isUsingProxy() verwendest ;-)
Wie gesagt ich hab keine Probleme mit oben genannten Optionen über eine HttpURLConnection Daten über einen Proxy zu beziehen... welche Java Version verwendest du denn?

Btw. mit dem Parameter http.nonProxyHosts kann man ürbigens Hosts angeben die nicht über den Proxy sondern direkt angesprochen werden sollen. Mehrere Hosts trennt man dabei mit einem Pipe '|' Zeichen.

Gruß Tom


----------



## Billie (23. Mai 2006)

Hellas!

Hab jetzt eine Frage bzw. ein Problem mit einer Proxy-Verbindung. Also folgendens, ich habe eine JavaWebStart-Anwendung welche sich über eine HttpUrlConnection zu einem Server verbindet. In diese Anwendung habe ich Heute bzw. wollte ich auch einen Dialog für Proxy-Einstellungen einfügen.

Klappt alles soweit, nur das ich keine Rechte habe System Properties zu setzten. Die Anwendung läuft als FileOpenService... Ich hab nun wohl keine Möglichkeit die Systemproperties zu setzten, außer ich füge noch einen Service hinzu, oder? Und welchen Service würde ich hierzu benötigen? Reicht BasicService evtl. schon aus?

lg Billie


----------



## jer1cho (7. Mai 2007)

```
System.setProperty( "proxySet", "true" );
            System.setProperty( "proxyHost", "24.151.169.51" );
            System.setProperty( "proxyPort", "13139" );
            try {
                URL url=new URL("http://www.wieistmeineip.de/");
                
                try {
                    InputStream is=url.openStream();
                    OutputStream os=new FileOutputStream("c:/output12.html");
                    int i;
                    while(( i=is.read())>-1){
                        os.write(i);
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
                
            } catch (MalformedURLException ex) {
                ex.printStackTrace();
            }
```

also der proxy funktioniert nicht aber statt einer io exception connected das ding einfach normal und ich bekomme meine echte ip zurück.
Was mache ich da falsch?


----------



## jer1cho (8. Mai 2007)

hmm also ich glaube ich muss den proxyselector setzten :
ProxySelector.setDefault(...


----------



## tobias_petry (8. Mai 2007)

ich habe vor einiger Zeit mal eine Klasse geschrieben, mit der ich durch Proxys komme sowie mich bei denen Autentifizieren kann, funktioniert prima, vllt hilft es euch ja 


```
package lib;

import java.net.Authenticator;
import java.net.PasswordAuthentication;

public class ProxyConnection{

	public ProxyConnection(String host, int port){
		this.proxyDaten(host,port);
	}
	
	public ProxyConnection(String host, int port, String username, String passwort){
		this.proxyDaten(host,port);
		Authenticator.setDefault(new ProxyAuth(username,passwort));
	}
	
	private void proxyDaten(String host, int port){
        System.setProperty("http.proxySet","true");
        System.setProperty("http.proxyHost",host);
        System.setProperty("http.proxyPort",String.valueOf(port));		
	}
	
	private class ProxyAuth extends Authenticator {
		private String username;
		private String passwort;
		public ProxyAuth(String username, String passwort) {
			this.username = username;
			this.passwort = passwort;
		}
		protected PasswordAuthentication getPasswordAuthentication() {
			return(new PasswordAuthentication(this.username, this.passwort.toCharArray()));
		}
	}

}
```

Das setzen von http.proxyUser hatte leider nicht geholfen, da eine Windows-Autentifizierung von Nöten war, aber die nette interne Java-Klasse PasswordAuthentication kann das lösen


----------



## Lex (1. März 2010)

Hallo,

ich hatte für eine Proxyfunktion diesen Code genommen welcher hier beschrieben wurde:

```
System.setProperty("proxyPort","8080");
System.setProperty("proxyHost","proxy");
System.setProperty( "http.proxyUser", "benutzer" );
System.setProperty( "http.proxyPassword", "passwort" );
```

Wenn ich einen Proxy benützte bei dem ich keine  Authentifizierung benötige und diese daher auch nicht setzen muss klappt es ohne Probleme. Aber wenn ich dann einen Proxy mit Authentifizierung  benützten möchte funktioniert es leider nicht.
Daher wollte ich fragen ob man vielleicht beim setzen von einem Proxy mit Userdaten sonst noch irgend etwas anderes beachten muss.


----------



## Miha (24. März 2010)

Danke tobias_petry,

mit deinem Ansatz über PasswordAuthentication funktioniert alles.

Es wäre aber trotzdem interessant zu wissen wie man über "http.proxyUser " die Authentifizierung konfiguriert (brauche das für Tomcat oder allgemein für JVM).


----------



## AddyH (1. Dezember 2010)

Sorry, ein so altes Thema wieder aufzugreifen, aber ich habe eine set Propety Einstellung gefunden, mit der ich die Systemeinstellungen übernehmen kann:


```
System.setProperty("java.net.useSystemProxies", "true");
```

Allerdings habe ich dann das Problem, das meine Sockets nicht mehr gehen.
Und mit einem einfachen


```
System.setProperty("java.net.useSystemProxies", "false");
```

nach dem true, geht es auch nicht mehr.
Sehr suspekt


----------

