Frage

Diese Frage scheint klar zu sein, was passiert: Ich habe bereits eine Verbindung geöffnet, das Problem ist, dass ich nicht weiß warum.

Im Moment teste ich nur mein HTTP -Login und meine HTTP -Anmeldung.

Anmeldung:

HttpURLConnection con = openConnection(URLGenerator.getLoginURL(), true, true,"POST");
        String content = ...;
        writeToOutput(con, content);
        con.connect();
        String cookieVal = con.getHeaderField("Set-Cookie");
        if(cookieVal != null)
        {
            sessionId = cookieVal.substring(0, cookieVal.indexOf(";"));
        }
        con.disconnect();
        return con.getResponseCode();

Ausloggen:

    HttpURLConnection con = openConnection(URLGenerator.getLogoutURL(), true, true,"GET");
    String content = ...;
    writeToOutput(con, content);
    setCookies(con);
    con.connect();
    con.disconnect();
    return con.getResponseCode();

Und für die Codeliebhaber die Funktion openConnection (weil ich weiß, dass die Leute als erstes fragen werden, ist "Wo ist diese Funktion"

public static final HttpURLConnection openConnection(URL url, boolean in, boolean out,String requestMethode) throws IOException{
        HttpURLConnection con = (HttpURLConnection) url.openConnection ();
        con.setDoInput(in);
        con.setDoOutput (out);
        if(requestMethode == null){
            requestMethode = "GET";
        }
        con.setRequestMethod(requestMethode);
        con.setRequestProperty ("Content-Type", "application/x-www-form-urlencoded");
        return con;
    }

Dies ist die Funktion, die die auslöst java.lang.illegalstateException: bereits verbunden

public static final void setCookies(HttpURLConnection con){
        if(sessionId != null)
        {
            con.setRequestProperty("Cookie", sessionId);
        }
    }

Was ich nicht bekomme, ist, warum die Verbindung immer noch offen ist.

Ich habe sogar versucht, eine Trennung anzurufen, aber es funktioniert nicht.

Ich dachte, der Auftraggeber sollte ein HttpurlConncetion -Objekt einrichten und eine Verbindung herstellen, um die Anforderung auszuführen, das Ergebnis zu empfangen und die Verbindung zu Ende zu bringen.

Irgendwelche Ideen?

Danke Jason

War es hilfreich?

Lösung

Sie müssen Cookies einstellen (Anforderungsheaderwerte) Vor Sie schreiben an die Anfrage. Sie können die Anfrage -Header nicht mehr ändern, wenn das erste Bit der Anfrage -Körperschaft gesendet wurde.

Also, wechseln Sie

writeToOutput(con, content);
setCookies(con);

zu

setCookies(con);
writeToOutput(con, content);

Und dieses Problem sollte verschwinden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top