Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Internetverbindung über Proxy

6 views
Skip to first unread message
Message has been deleted

Sören van Heek

unread,
Dec 5, 2007, 9:40:19 AM12/5/07
to
Hallo Zusammen,

ich möchte von einer Applikation aus auf's Internet zugreifen. Jetzt
sitzen wir hier in der Firma hinter einem Proxy. Ich stelle also
zunächst die Proxy-Daten in den Properties ein:


System.getProperties().setProperty("http.proxySet", "true");
System.getProperties().setProperty("http.proxyHost", ip-adresse);
System.getProperties().setProperty("http.proxyPort", meinPort);


Danach versuche ich, über (etwas vereinfacht)


new URL(meineAdresse).openConnection()


eine Verbindung aufzubauen. Ohne Proxy klappt alles einwandfrei.
Wenn ich über den Proxy gehe, bekomme ich aber immer eine
"java.net.NoRouteToHostException: No route to host: connect"-
Exception.


Es scheint so, als wenn er die Proxyeinstellungen komplett ignoriert.
Habe das auch schonmal mit unserem Admin angeguckt, aber da er kein
Java kennt, weiß er natürlich auch keine weiteren Einstellungen, die
man vornehmen könnte. Über die Internet-Browser (also IE oder
Firefox)
funktioniert das mit Proxyeinstellungen einwandfrei, ebenso in
anderen
Windows-Anwendungen.


Ich arbeite mit jre_1_6_03 unter Windows.


Weiß hier vielleicht jemand Rat, wo ich noch dran schrauben könnte?


Danke!


Sören


PS: Hier mal der ganze Stack-Trace:


java.net.NoRouteToHostException: No route to host: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:
333)
at
java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:
195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at sun.net.NetworkClient.doConnect(NetworkClient.java:157)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:
394)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:
529)
at
sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:
271)
at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:
328)
at
sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClien...
172)
at
sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:
729)
at
sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Abstrac...
158)
at
sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection....
977)
at
sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConn...
234)
at java.net.URL.openStream(URL.java:1009)

Sören van Heek

unread,
Dec 5, 2007, 10:38:04 AM12/5/07
to
On 5 Dez., 15:40, "Sören van Heek" <svh_s...@gmx.de> wrote:
> Hallo Zusammen,
>
> ich möchte von einer Applikation aus auf's Internet zugreifen. Jetzt
> sitzen wir hier in der Firma hinter einem Proxy. Ich stelle also
> zunächst die Proxy-Daten in den Properties ein:
>
> System.getProperties().setProperty("http.proxySet", "true");
> System.getProperties().setProperty("http.proxyHost", ip-adresse);
> System.getProperties().setProperty("http.proxyPort", meinPort);

Scheint unnötig zu sein, bzw. nicht zu funktionieren.

>
> Danach versuche ich, über (etwas vereinfacht)
>
> new URL(meineAdresse).openConnection()
>

[...]

Habe es anscheinend durch ausprobieren irgendwie geschafft:

InetAddress iad = InetAddress.getByName(meineProxyIpAdresse);
Socket s = new Socket(iad, meinProxyPort);
proxy = new Proxy(Proxy.Type.HTTP, s.getRemoteSocketAddress());
myUrl.openConnection(proxy);

Verstehe aber nach wie vor nicht so ganz, wozu dann die Einstellungen
in den Properties da sind.
Weiß auch nicht, ob das jetzt die Musterlösung ist, vielleicht geht's
eleganter, aber hauptsache, es funktioniert erstmal.
Falls noch einer was dazu weiß, wäre es wissenswert für mich (und
vielleicht andere auch).

Tschö

Sören

Ralf Ullrich

unread,
Dec 5, 2007, 11:35:24 AM12/5/07
to
Sören van Heek wrote:

>System.getProperties().setProperty("http.proxySet", "true");
>System.getProperties().setProperty("http.proxyHost", ip-adresse);
>System.getProperties().setProperty("http.proxyPort", meinPort);

Nicht alle Properties lassen sich (selbst ganz am Anfang von main())
programmatisch über java.lang.System setzen, da sie bereits fürs
Hochfahren der VM benutzt werden und nur einmal ausgelesen werden, was in
dem Fall dann schon passiert ist, wenn die Kontrolle an main() übergeben
wird.

Solche Properties lassen sich der VM nur beim Starten über die
Kommandozeilenoption -D<property-name>=<value> mitteilen.

Ich bin mir gerade nicht sicher ob die HTTP-Proxy Properties zu dieser
Kategorie gehören und habe auch gerade nicht nachgeschaut ob deine
Properties die richtigen sind, aber du solltest es mal über die -D-Option
probieren.

cu

Ralf Ullrich

unread,
Dec 5, 2007, 11:46:52 AM12/5/07
to
Sören van Heek wrote:

>System.getProperties().setProperty("http.proxySet", "true");
>System.getProperties().setProperty("http.proxyHost", ip-adresse);
>System.getProperties().setProperty("http.proxyPort", meinPort);

Ach noch was fällt mir gerade auf: Warum verwendest du nicht direkt
System.setProperty() ? Denn System.getProperties() liefert dir womöglich
nur eine Kopie der wirklichen Properties und dann ist es völlig belanglos,
was du an dieser Kopie änderst.

cu

S.van Heek

unread,
Dec 5, 2007, 12:26:35 PM12/5/07
to

"Ralf Ullrich" <ne...@jnana.de> schrieb im Newsbeitrag
news:xn0fel9l...@news.online.de...

Hatte ich auch schon ausprobiert, war aber der gleiche Effekt.
Ich probier morgen nochmal deinen anderen Tipp.

Allerdings heißt das auch, dass man zur Laufzeit des Programms den Weg über
den Proxy nicht ein- oder ausschalten kann.
Danke auf jeden Fall!

Sören


Andreas Gairing

unread,
Dec 6, 2007, 2:21:01 AM12/6/07
to
S.van Heek schrieb:

>
> Allerdings heißt das auch, dass man zur Laufzeit des Programms den Weg über
> den Proxy nicht ein- oder ausschalten kann.

Falls es sich um JDK 1.5 oder höher handelt, hast Du die Möglichkeit
einen eigenen ProxySelector (java.net.ProxySelector) zu implementieren,
der bei jedem Verbindungsaufbau befragt wird. Dann hast Du es selber in
der Hand, wann welcher Proxy benutzt wird.

Gruß,
Andreas

Sören van Heek

unread,
Dec 6, 2007, 4:15:31 AM12/6/07
to


Jo, habe unter dem Stichwort diesen Link gefunden:
http://java.sun.com/j2se/1.5.0/docs/guide/net/proxies.html

(warum vorher eigentlich nicht, nänänä?).
Da habe ich mit meiner Version ja richtig geraten :-)
Der ProxySelector ist für meine Bedürfnisse etwas übertrieben.
Danke für den Hinweis!

Sören

Matthias Hunstock

unread,
Dec 11, 2007, 10:46:39 AM12/11/07
to
Sören van Heek schrieb:

> new URL(meineAdresse).openConnection()

> eine Verbindung aufzubauen. Ohne Proxy klappt alles einwandfrei.
> Wenn ich über den Proxy gehe, bekomme ich aber immer eine
> "java.net.NoRouteToHostException: No route to host: connect"-
> Exception.

warum openConnection? Das muss über einen Proxy nicht funktionieren, da
dieser eben meist auf Objekt-Ebene arbeitet. "Direktverbindungen" werden
nur über die HTTP-Methode "CONNECT" zugelassen, da das für HTTPS nötig
ist. Vielleicht solltest du mit deinem Admin mal schaun, ob der Proxy
auch HTTPS macht, und das auch für Zielports != 443. In Firmennetzen ist
letzteres meist nicht der Fall, da man damit das Netz von innen nach
außen ziemlich weit aufmacht.

Falls du wirklich "nur" HTTP-Objekte abfragen willst, warum nicht mit
der Methode

public final InputStream openStream()

?

HTH
Matthias

Ralf Ullrich

unread,
Dec 11, 2007, 11:16:23 AM12/11/07
to
Matthias Hunstock wrote:

>warum openConnection?

Weil's richtig ist?!

Du verwechselst da was. openConnection() erzeugt nur ein passendes
URLConnection-Objekt, aber das heißt noch lange nicht, dass da jetzt
sofort eine Netzwerk- oder gar HTTP-Verbindung geöffnet wird.

cu

Ralf Ullrich

unread,
Dec 11, 2007, 11:31:04 AM12/11/07
to
Matthias Hunstock wrote:

>warum openConnection?

vs.

>warum nicht mit der Methode
>
>public final InputStream openStream()

Du weißt, dass openStream() so implementiert ist

return openConnection().getInputStream();

??

(Steht übrigens in den JavaDocs.)

cu

Matthias Hunstock

unread,
Dec 11, 2007, 4:16:10 PM12/11/07
to
Ralf Ullrich schrieb:

> Du weißt, dass openStream() so implementiert ist
>
> return openConnection().getInputStream();

Ne, dann hätt ich ja nicht so doof gefragt ;)

Die Doc die ich aufgesucht hab, und die rein äußerlich auch wie JavaDoc
aussieht, hat folgendes ausgesagt:

public URLConnection openConnection()
Liefert ein URLConnection-Objekt für die URL, mit dem bidirektionaler
Datenaustausch mit der URL möglich ist.
[...]

public final InputStream openStream()
Eröffnet einen InputStream für das URL-Objekt, mit dem die URL-Daten
gelesen werden können.
[...]

Da hab ich "bidirektional" und "gelesen" schon so verstanden, dass die
erste Methode versucht, explizit eine Verbindung herzustellen, während
letztere eben "irgendwie" per GET das Objekt anfordert und zur Verfügung
stellt. Aber stimmt, ich hab schonmal irgendwas mit openStream
implementiert, wo auch die Headerdaten mit ausgegeben werden.

Naja, das scheint eine etwas betagte deutsche Übersetzung zu sein. Also
Notiz an mich: ab jetz immer direkt auf sun.com schaun ;)

gruß

0 new messages