# Probleme mit HttpURLConnection



## Stefan1200 (2. Jun 2004)

Hallo,

ich öffne über Proxy eine HttpURLConnection. Es funktioniert bei vielen Seiten wunderbar.
Aber warum funktioniert folgendes nicht:


```
URL url = new URL("http","www.alsterradio.de",80,"/playergert/alplaybox.php?mode=player");
HttpURLConnection urlc = (HttpURLConnection)url.openConnection();
BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(urlc.getInputStream()));
```

Wenn ich den bufferedreader jetzt auslese, gibt er mir bei der angegebenen URL und Datei NICHTS zurück (null).
Mit allen anderen Seiten funktioniert es. Im Browser wird bei mir die Seite auch angezeigt. Habt Ihr eine Idee?


----------



## meez (2. Jun 2004)

Vielleicht liegt am Umweg über die HTTPURLConnection Klasse???
Versuchs mal so:


```
URL url = new URL("http://www.alsterradio.de/playergert/alplaybox.php?mode=player");
BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(url.openStream()));
```


----------



## Stefan1200 (2. Jun 2004)

Nachtrag:

Ich habe herausgefunden, das ohne Proxy der von mir beschriebene Code oben funktioniert.
Ist das ein Bug von Java?


@ meez: Ich teste das.


----------



## meez (2. Jun 2004)

Setzt du den Proxy als System-Property?...

Ich würde dir ehh raten, nicht diese Wrapper-Klassen zu benutzten.
Nimm zum Beispiel den HTTPClient von Apache...


----------



## Stefan1200 (2. Jun 2004)

meez hat gesagt.:
			
		

> Setzt du den Proxy als System-Property?...
> 
> Ich würde dir ehh raten, nicht diese Wrapper-Klassen zu benutzten.
> Nimm zum Beispiel den HTTPClient von Apache...



Ja, ich setze den Proxy als System Property.
Mit anderen URLs klappt es ja auch über Proxy, nur halt mit der nicht. Schalte ich den Proxy ab, geht auch die URL, ist doch komisch oder nicht? Ein Browser öffnet aber die URL über den selben Proxy.

Ich habe ja auch schon versucht über Socket selbst die URLs zu laden. Klappt ja wunderbar ohne Proxy. Schalte ich aber den Proxy ein, will er die Datei nicht von dem Host runter laden, den ich angebe, sondern vom Proxy. Und auf dem Proxy liegt die Datei ja nicht.

Den HTTPClient von Apache? Wie?


----------



## meez (2. Jun 2004)

Commons-Httpclient 

Ist eine saubere implementierung des Http-Protocols...http://jakarta.apache.org/commons/httpclient

Kleiner Sample-Code


```
HttpClient http = new HttpClient(new MultiThreadedHttpConnectionManager());			
http.setState(new HttpState());	 
http.getState().setCookiePolicy(CookiePolicy.RFC2109);	
//http.setTimeout(<int millis>);
http.getHostConfiguration().setProxy(<proxyHost>, <int proxyPort>);

GetMethod method = new GetMethod("http://www.alsterradio.de/playergert/alplaybox.php?mode=player");
http.excuteMethod(method);
```

Dancha kannst du mit 

String s = method.getResponseBodyAsString() oder 
InputStream i = method.getResponseBodyAsStream()

das was du brauchst hohlen..


----------



## Stefan1200 (2. Jun 2004)

Klingt interessant mit dem HTTPClient, aber auf der Homepage im Download Bereich werde ich quasi erschlagen. Was muss ich da runterladen?

Aber ist das denn normal, das Java Sun API solche Probleme mit Proxys hat?


----------



## meez (2. Jun 2004)

Stefan1200 hat gesagt.:
			
		

> Klingt interessant mit dem HTTPClient, aber auf der Homepage im Download Bereich werde ich quasi erschlagen. Was muss ich da runterladen?
> 
> Aber ist das denn normal, das Java Sun API solche Probleme mit Proxys hat?



Möglich ist das scho, da die Klassen das Http-Protocol nicht wirklich sauber implementieren.



Das hier musst du runterladen...entpacken, und das Jar-File in den ClassPath einbinden. http://sunsite.cnlab-switch.ch/www/.../httpclient/binary/commons-httpclient-2.0.zip


----------



## Stefan1200 (4. Jun 2004)

So, habe das mit dem HTTPClient ausprobiert...nachdem ich die Logging Geschichte auch noch runtergeladen habe.
Es funktioniert wunderbar über Proxy. Aber kann man die Logger Warnungen eigentlich ausschalten? So wird immer in der Konsole beim Abrufen einer Seite folgender Text geschrieben:

04.06.2004 11:36:33 org.apache.commons.httpclient.HttpMethodBase readResponseBody
WARNUNG: Response content length is not known

Das nervt irgendwie.


----------



## meez (4. Jun 2004)

Stell ihn einfach auf Fatal:

 System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", "fatal");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "fatal");


----------



## student25 (7. Jun 2004)

Hallo, hat einer von euch vielleicht den kompletten Quellcode?

Ich will eine Seite herunterladen, das klappt hiermit:
http://www.java-forum.org/de/viewtopic.php?t=5377&highlight=
aber nicht richtig.

Danke im vorraus.


----------

