HttpUrlConnection

DoppelD

Grünschnabel
Hallo zusammen,

kann mir jemand sagen warum HttpUrlConnection Object manchmal direkt nach dem anlegen bereits verbunden sind?

Bsp.:

Code:
try{
   URL url = new URL("http:\\tutorials.de");
   HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
   //jetzt ist httpCon connected bereits true
   //so das setRequestMetho fehlschlägt
   httpCon.setRequestMethod("GET");
}
catch(Exception ex){
   // already connected
}

Wie kann das sein? Mir ist bekannt das einige Funktionen selbst einen Connect durchführen, sofern noch nicht geschehen, aber die setRequestMethod definitiv nicht!

Noch ein Hinweis, ich arbeite mit Java 1.4 (J2ME)

schöne Grüße
DoppelD
 

CPoly

Mitglied Weizenbier
Du rufst in deinem gezeigten Code zwei Methoden auf und sagst, dass "setRequestMethod" definitiv kein Connect durchführt. Die andere Methode, deren Name "openConnection" ist, lässt vermuten, dass dort die Verbindung geöffnet wird. Und die Dokumentation bestätigt diese Vermutung. http://download.oracle.com/javase/1.4.2/docs/api/java/net/URL.html#openConnection()

Ich hab es nicht getestet, aber so müsste es richtig aussehen:

Java:
try{
   URL url = new URL("http:\\tutorials.de");

   HttpURLConnection httpCon = new HttpURLConnection(url);

   httpCon.setRequestMethod("GET");

    httpCon.connect();
}
catch(Exception ex){
   // already connected
}
 

DoppelD

Grünschnabel
da muss ich leider wiedersprechen, eine Instanz von einer HttpURLConnection bekomme ich nur über ULR.openConnection, da HttpURLConnection keinen öffentlichen Konstruktor hat. (http://download.oracle.com/javase/...nection.html#HttpURLConnection(java.net.URL))

Durch url.openConnection sollte lediglich eine Socketverbindung hergestellt werden, die liegt ja darunter hat mit der HTTP Verbindung aber noch lange nix zu tun.

Wie gesagt manchmal geht's ja auch.
Im übrigen wird's hier http://download.oracle.com/javase/tutorial/networking/urls/readingWriting.html im Beispiel gleich verwendet. Hier wird halt ein setDoOutput aufruf verwendet, der würde aber bei mir zu der gleichen Exception führen.

mfg
 

CPoly

Mitglied Weizenbier
Ok, ich nehm meine Aussagen nochmal zurück. Vielleicht kann dir jemand anderes dabei helfen.
Aber es kann nicht schaden die genaue Exception noch zu posten.
 

DoppelD

Grünschnabel
Daran soll es nicht scheitern, hier bitte:

"java.net.ProtocolException: Can't reset method: already connected"

Auch wenn ich nicht glaube das uns das weiterhilft, weil warum sie geworfen wird ist mir klar weil das HttpURLConneciton object connected ist und dann versucht wird zu manipulieren, das Problem ist nur das es zu diesem Zeitpunkt eigentlich gar nicht connected sein dürfte!

Achso wenn ich abfrage ob es connected ist und dann einen disconnect mache klappt das logischerweise auch mit der RequestMethod. Ich will nur verstehen warum ich ein bereits verbundenes Object bekomme.
 

DoppelD

Grünschnabel
Jetzt wirds ganz Kurios:

Java:
URL url = new URL(_webAddress);
httpCon = (HttpURLConnection)url.openConnection();
_httpCon = (HttpURLConnection)url.openConnection();

httpCon ist eine lokale Varbiable connected == false // OK
_httpCon ist ein Member connected == true;

Es wird noch besser:

Java:
_httpCon = httpCon;

Jetzt ist httpCon auch Connected!

Muss ich das verstehen, kann mir das jemand erklären?

Vielen Dank und schöne Grüße
 

Neue Beiträge