Bad Request nach Form Login in Jakarta HttpClient

Status
Nicht offen für weitere Antworten.

krel

Mitglied
Ich habe ein kleines Problem mit einem FormLogin. Ich möchte mich mittels HttpClient in das Confixx-System meiner Homepage einloggen um dort einige Sachen zu erledigen.
Dazu benutze ich folgenden Code
Code:
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.cookie.CookieSpec;
import org.apache.commons.httpclient.methods.*;

/**
 * 


 * A example that demonstrates how HttpClient APIs can be used to perform 
 * form-based logon.
 * </p>
 *
 * @author Oleg Kalnichevski
 *
 */
public class test2
{
    static final String LOGON_SITE = "login3.internet4ever.de";
    static final int    LOGON_PORT = 80;

    public test2() {
        super();
    }

    public static void main(String[] args) throws Exception {

        HttpClient client = new HttpClient();
        client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT, "http");
        //client.getParams().setParameter("http.protocol.version", HttpVersion.HTTP_1_0);
        client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
     	// 'developer.java.sun.com' has cookie compliance problems
        // Their session cookie's domain attribute is in violation of the RFC2109
        // We have to resort to using compatibility cookie policy

        GetMethod authget = new GetMethod("/user/index.php");

        client.executeMethod(authget);
        System.out.println("Login form get: " + authget.getStatusLine().toString()); 
        // release any connection resources used by the method
        authget.releaseConnection();
        // See if we got any cookies
        CookieSpec cookiespec = CookiePolicy.getDefaultSpec();
        Cookie[] initcookies = cookiespec.match(
            LOGON_SITE, LOGON_PORT, "/", false, client.getState().getCookies());
        System.out.println("Initial set of cookies:");    
        if (initcookies.length == 0) {
            System.out.println("None");    
        } else {
            for (int i = 0; i < initcookies.length; i++) {
                System.out.println("- " + initcookies[i].toString());    
            }
        }
        
        PostMethod authpost = new PostMethod("/login.php");
        // Prepare login parameters
        NameValuePair action   = new NameValuePair("action", "lgtogin");
        NameValuePair url      = new NameValuePair("url", "/index.php");
        NameValuePair type 	   = new NameValuePair("Content-Type","application/x-www-form-urlencoded");
        NameValuePair userid   = new NameValuePair("username", "user");
        NameValuePair password = new NameValuePair("password", "passwort");
        authpost.setRequestBody( 
          new NameValuePair[] {url, userid, password,type,action});
        
        client.executeMethod(authpost);
        System.out.println("Login form post: " + authpost.getStatusLine().toString()); 
        // release any connection resources used by the method
        authpost.releaseConnection();
        // See if we got any cookies
        // The only way of telling whether logon succeeded is 
        // by finding a session cookie
        Cookie[] logoncookies = cookiespec.match(
            LOGON_SITE, LOGON_PORT, "/", false, client.getState().getCookies());
        System.out.println("Logon cookies:");    
        if (logoncookies.length == 0) {
            System.out.println("None");    
        } else {
            for (int i = 0; i < logoncookies.length; i++) {
                System.out.println("- " + logoncookies[i].toString());    
            }
        }
        // Usually a successful form-based login results in a redicrect to 
        // another url
        int statuscode = authpost.getStatusCode();
        if ((statuscode == HttpStatus.SC_MOVED_TEMPORARILY) ||
            (statuscode == HttpStatus.SC_MOVED_PERMANENTLY) ||
            (statuscode == HttpStatus.SC_SEE_OTHER) ||
            (statuscode == HttpStatus.SC_TEMPORARY_REDIRECT)) {
            Header header = authpost.getResponseHeader("location");
            if (header != null) {
                String newuri = header.getValue();
                if ((newuri == null) || (newuri.equals(""))) {
                    newuri = "/";
                }
                //newuri+="index.php";
                System.out.println("Redirect target: " + newuri); 
                GetMethod redirect = new GetMethod(newuri);
                
                client.executeMethod(redirect);
                //System.out.println(neu.getResponseBodyAsString());
                System.out.println("Redirect: " + redirect.getStatusLine().toString());
                //System.out.println(redirect.getResponseBodyAsString());
                // release any connection resources used by the method
                redirect.releaseConnection();
            } else {
                System.out.println("Invalid redirect");
                System.exit(1);
            }
        }
    }
}

ist das Bsp von jakarta, was ich einfach umgeschrieben habe. Einloggen kann ich mich, ich bekomme auch eine Server-ID, nur beim redirect bekomme ich einen Bad Request. Folgendes wird ausgegeben

Login form get: HTTP/1.1 200 OK
Initial set of cookies:
- SID=d79978fe65016fef5afcaadbfe650f5b
Login form post: HTTP/1.1 302 Found
Logon cookies:
- SID=d79978fe65016fef5afcaadbfe650f5b
- server_id=0d1a0dca9569989047ff1fece438c8cb
Redirect target: user/web1/
Redirect: HTTP/1.1 400 Bad Request

Es werden folgende Header gesendet, wenn ich den BadRequest bekomme

2007/09/17 20:52:56:827 CEST [DEBUG] header - >> "GET user/web1/index.php HTTP/1.1[\r][\n]"
2007/09/17 20:52:56:827 CEST [DEBUG] HttpMethodBase - Adding Host request header
2007/09/17 20:52:56:827 CEST [DEBUG] header - >> "User-Agent: Jakarta Commons-HttpClient/3.1[\r][\n]"
2007/09/17 20:52:56:827 CEST [DEBUG] header - >> "Host: login3.internet4ever.de[\r][\n]"
2007/09/17 20:52:56:827 CEST [DEBUG] header - >> "[\r][\n]"
2007/09/17 20:52:56:952 CEST [DEBUG] header - << "HTTP/1.1 400 Bad Request[\r][\n]"
2007/09/17 20:52:56:952 CEST [DEBUG] header - << "HTTP/1.1 400 Bad Request[\r][\n]"
2007/09/17 20:52:56:952 CEST [DEBUG] header - << "Date: Mon, 17 Sep 2007 18:59:57 GMT[\r][\n]"
2007/09/17 20:52:56:967 CEST [DEBUG] header - << "Server: Apache/2.2.3 (Debian) mod_python/3.2.10 Python/2.4.4 PHP/5.2.0-8+etch4 proxy_html/2.5 mod_ssl/2.2.3 OpenSSL/0.9.8c mod_perl/2.0.2 Perl/v5.8.8[\r][\n]"
2007/09/17 20:52:56:967 CEST [DEBUG] header - << "Vary: accept-language,accept-charset[\r][\n]"
2007/09/17 20:52:56:967 CEST [DEBUG] header - << "Accept-Ranges: bytes[\r][\n]"
2007/09/17 20:52:56:967 CEST [DEBUG] header - << "Connection: close[\r][\n]"
2007/09/17 20:52:56:967 CEST [DEBUG] header - << "Content-Type: text/html; charset=iso-8859-1[\r][\n]"
2007/09/17 20:52:56:967 CEST [DEBUG] header - << "Content-Language: en[\r][\n]"
2007/09/17 20:52:56:967 CEST [DEBUG] header - << "[\r][\n]"
2007/09/17 20:52:56:967 CEST [DEBUG] HttpMethodBase - Should close connection in response to directive: close
2007/09/17 20:52:56:967 CEST [DEBUG] HttpConnection - Releasing connection back to connection manager.Redirect: HTTP/1.1 400 Bad Request

jemand ne Idee, woran das liegen könnte?
 

krel

Mitglied
hat bis jetzt keiner dieses Problem gehabt, oder wieso reagiert niemand auf diesen Thread?
Hab es mittlerweile mit allen möglichen Sachen probiert, auch mit http/1.0.. Es muss doch ne Lösung geben

mfg
 

Drake

Bekanntes Mitglied
Hallo

der jakrata client hat einige schwierigkeiten mit automatischen redirects. Wenn der login an sich erfolreich war, ignoriere redirect Fehlermeldungen und verfahre einfach weiter.

Dabei hast du zwei Möglichkeiten, entweder die Seite, auf die umgeleitet wird hard coded bearbeiten oder sie aus dem empfanden Header zu lesen und dann aufzurufen.
Beides brauchst du aber auch nur, wenn du für weitere Schritte Informationen aus dieser auslesen musst, ansonsten kannst du die Aktionen, welche du durchführen möchtest (POST bzw. GET requests) auch dierekt an die entschprechende url senden.
 

krel

Mitglied
@Drake, danke so funktioniert es super, hab grad aber auch rausgefunden, dass ein einfaches "/" fehlte und die URL praktisch so aussah login3.internet4ever.deuser/web1 was natürlich so nicht funktionieren kann
dann werde ich jetzt mal weiter tüffteln

danke
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Thallius HTTP Kann man den Raw HTTPS Request irgendwie ausgeben lassen? Netzwerkprogrammierung 6
O HTTP Wer hilft mit meinem UTF-8 http Request ? Netzwerkprogrammierung 1
J API Aufruf mit GET Request und HMAC Netzwerkprogrammierung 3
M HTTP PATCH Request mit Java ausführen Netzwerkprogrammierung 2
N Post u Head Request an Server Netzwerkprogrammierung 4
M http request and response Netzwerkprogrammierung 0
J Json von Html request einlesen Netzwerkprogrammierung 0
T curl request in java umwandeln Netzwerkprogrammierung 4
S PUT-Request Netzwerkprogrammierung 0
P Java Deauth / Deauthentication request Netzwerkprogrammierung 10
C Android: Json-POST Request zu REST Webservice Netzwerkprogrammierung 2
R Seltsames Verhalten bei GET Request Netzwerkprogrammierung 7
Y HTTP No request data found Netzwerkprogrammierung 2
B Socket HTTP-Request führt zu Endlosschleife Netzwerkprogrammierung 5
B Post Request in Java Netzwerkprogrammierung 11
D OT JavaScript JQuery AJAX Request Netzwerkprogrammierung 2
R HTTP Apache HTTP Client: Request mit angehängter Datei Netzwerkprogrammierung 2
O Http request Netzwerkprogrammierung 7
T HTTP POST Request Netzwerkprogrammierung 3
E HTTP Request? Netzwerkprogrammierung 4
L Body eines http Request auslesen Netzwerkprogrammierung 2
K Ende eines HTTP Response/Request Netzwerkprogrammierung 6
D http request Netzwerkprogrammierung 11
ARadauer POST Request absetzen.. Netzwerkprogrammierung 3
J GET Request Netzwerkprogrammierung 1
hdi POST Request (HttpConnection) Netzwerkprogrammierung 6
G HTTP-Request InputStream-Problem Netzwerkprogrammierung 5
J 403 error bei POST request Netzwerkprogrammierung 3
G auf http-request antworten. Netzwerkprogrammierung 3
G JMS Objektzugriff Request Reply erzeugt lediglich Kopie Netzwerkprogrammierung 4
L Java HTTP Request Netzwerkprogrammierung 3
S HTTP Request erstellen Netzwerkprogrammierung 2
B lange Strings in http-Request? Netzwerkprogrammierung 3
M erst POST dann Http-Request über URLConnection Netzwerkprogrammierung 3
m@nu Ende von Stream bei HTTP-Request Netzwerkprogrammierung 3
D HTTP Request erstellen (Form Name übergeben!) Netzwerkprogrammierung 3
P Easy Http Request Netzwerkprogrammierung 9
A HTTPS-Request via Proxy mit Konfigurationsskript Netzwerkprogrammierung 3
J HTTP-POST-Request mit Anhang über Socket Netzwerkprogrammierung 2
Z HTTP Request Netzwerkprogrammierung 3
A http request per socket an apache server Netzwerkprogrammierung 5
M Ein HTTP-request aus Java heraus senden Netzwerkprogrammierung 3
J HTTP Request Netzwerkprogrammierung 2
B Laden einer *.csv Datei von einem Webserver (http-request) Netzwerkprogrammierung 8
C dhcp request Netzwerkprogrammierung 16
D Bad Request bei Dateiload Netzwerkprogrammierung 2
X mehrere Request über eine HttpURLConnection Netzwerkprogrammierung 2
G Http Request Netzwerkprogrammierung 2
Dann07 Audio streamen bricht immer ab nach kurzer Zeit Netzwerkprogrammierung 6
G seite nach posten eines html-forms laden Netzwerkprogrammierung 0
N websocket - keine Daten mehr nach ca 80 Sekunden Netzwerkprogrammierung 0
C Gerenderte Website nach der ausführung von JavaScript als HTML Code aus lesen Netzwerkprogrammierung 4
F Wiederverbinden nach socket Abbruch Netzwerkprogrammierung 1
T Socket sendet erst nach socket.close() Netzwerkprogrammierung 2
B Nach Verbindung gleich ObjectStream empfangen Netzwerkprogrammierung 1
L Verzeichnisse mit Inhalt nach SMB-Share kopieren Netzwerkprogrammierung 16
N HTTP Apache 4.2.1 HttpClient 302 nach Login und auf den weiteren Seiten. Netzwerkprogrammierung 5
K Socket Chat-GUI eigenes Event nach Empfangen Netzwerkprogrammierung 2
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
P Datenpakete nach Australien Netzwerkprogrammierung 7
C Socket Identifikation des clients nach der accept() Methode Netzwerkprogrammierung 2
J Nach Dateiversand werden keine Nachrichten mehr übertragen Netzwerkprogrammierung 11
J Nachricht kommt erst nach beendigung der Anwendung an Netzwerkprogrammierung 4
D Socket Automatischer Reconnect nach einem Disconnect. Netzwerkprogrammierung 4
S Socket nach anderen clients im netzwerk suchen Netzwerkprogrammierung 3
B IP nach gewissen Kriterien überprüfen Netzwerkprogrammierung 5
V JNLP startet nicht !!?!! (je nach PC) Netzwerkprogrammierung 1
H Object Cast Problem nach Übertragung mit Log4j Netzwerkprogrammierung 5
DeviAn Über ein Linux Server ein Windows Server nach einer File fragen Netzwerkprogrammierung 6
Q Datein von Windows nach Mac senden Netzwerkprogrammierung 4
L RMI Programm beendet ohne Fehler sofort nach Start (Windows 2000) Netzwerkprogrammierung 7
T Zugriffsverweigerung nach Dateitransfer Netzwerkprogrammierung 7
T Nach Servern suchen Netzwerkprogrammierung 2
L nach Servern suchen Netzwerkprogrammierung 2
M ordner nach socket-übertragung defekt Netzwerkprogrammierung 5
B Im eingelesenen Text nach einem Wort suchen Netzwerkprogrammierung 46
M serialisierung funktioniert nur nach neuer instanzierung Netzwerkprogrammierung 3
W fehlerhafte Datei nach Dateitransfer per ServletOutputStream Netzwerkprogrammierung 2
A Client stürzt nach versand ab Netzwerkprogrammierung 13
M Verbindung nach Serverabsturz wieder aufbauen Netzwerkprogrammierung 9
S Unix Datei vom Server nach Windows übertragen Netzwerkprogrammierung 8
G Port belegt nach Server restart Netzwerkprogrammierung 5
G Socket wird nach Portscann geschlossen Netzwerkprogrammierung 2
N Verarbeitung nach Weiterleitung in Sockets Netzwerkprogrammierung 2
L Frage nach Socket Netzwerkprogrammierung 4
I HTTP S - Zertifikate+Cockies für Form-basierten Login Netzwerkprogrammierung 2
A HTMLunit: Form ElementNotFound Netzwerkprogrammierung 4
M HtmlUnit form finden... Netzwerkprogrammierung 2
E Multi-Part Form-Daten mit HttpURLConnection Netzwerkprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben