POST Request



  • Wenn das dein richtiges Passwort & Benutzername ist, würde ich das mal schnell wegmachen, bevor es ein anderer sieht.

    Mmmhhh, nicht registiert, am besten änderst du dein Passwort.

    Zum Problem: Das erzeugen des POST-Request sollte so sein:
    [cpp]
    char passwort[256]={"deinpasswort"};
    char benutzerid[256]={"benutzerid"};
    size=sprintf( buffer, "POST http://www.klamm.de/partner/start_login.php HTTP/1.0\nAccept-Language: de\nContent-Type: application/x-www-form-urlencoded\nPragma: no-cache\nHost: [url=http://www.klamm.de\nContent-Length]www.klamm.de\nContent-Length[/url]: %d\n\nloginid=%s&passwd=%s\r\n",16+strlen(benutzerid)+strlen(passwort), benutzerid, passwort);[/cpp]

    [ Dieser Beitrag wurde am 31.12.2002 um 14:45 Uhr von D@niel $chumann editiert. ]

    [ Dieser Beitrag wurde am 05.01.2003 um 22:55 Uhr von D@niel $chumann editiert. ]



  • Ich glaube in den Zeilen while (count > 0); liegt der Fehler!
    In der MSDN-Library steht nämlich:

    If no error occurs, recv returns the number of bytes received. If the connection has been gracefully closed, the return value is zero. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.

    Die Error Codes sind aber auch größer 0 -> Endlosschleife!

    Mach mal die while-Schleife raus und bau int WSAGetLastError(void); ein, dann weißt du was schief gelaufen ist!

    [ Dieser Beitrag wurde am 29.12.2002 um 23:18 Uhr von flenders editiert. ]



  • Mmmmmhhhh, das könnte noch funktionieren, aber der Server wartet auf die Zeichenfolge \r\n, vorher sendet er gar nichts. Nach dem Timeout wird er natürlich die Verbindung trennen.



  • hab mir mal deinen code gekrallt und an den server gesendet:

    HTTP/1.1 400 Bad Request
    Date: Mon, 30 Dec 2002 20:17:49 GMT
    Server: Apache
    Connection: close
    Content-Type: text/html; charset=iso-8859-1
    
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <HTML><HEAD>
    <TITLE>400 Bad Request</TITLE>
    </HEAD><BODY>
    <H1>Bad Request</H1>
    Your browser sent a request that this server could not understand.<P>
    Invalid URI in request POST ******URL***** HTTP/1.0<P>
    <HR>
    <ADDRESS>Apache/1.3.26 Server at ***** Port 80</ADDRESS>
    </BODY></HTML>
    
    HTTP/1.1 400 Bad Request
    Date: Mon, 30 Dec 2002 20:17:49 GMT
    Server: Apache
    Connection: close
    Content-Type: text/html; charset=iso-8859-1
    

    hm...
    und die schleife hab ich auch rausgenommen



  • Ich hab das Beispiel geändert (das was gefehlt hat ist Fett). So funktioniert es, hab es auch ausprobiert.



  • hm, was hast du als ausgabe bekommen, bzw was genau hast du da getestet? ob du dich so einloggen könntest, oder ob eine verbindung aufgebaut wurde? code bitte 🙂



  • Ich hab erstmal das zum Server gesendet, das ich vorher geschrieben habe. Dann hab ich die gleiche Fehlermeldung vom Server bekommen, wie du auch. Also hab ich es auf das obige geändert und dann hat der Server mir eine ziemlich große Seite zurückgeliefert. Natürlich hab ich das nicht alles gelesen, weil ja auch noch die HTML-Tags drin stehen.
    Ich guck es mir nochmal im IE an.

    Wo genau liegt jetzt noch dein Problem?



  • nun, ich möchte einen webbrowser schreiben, mit dem ich mich bei verschiedenen seiten einloggen kann (zum verwalten).
    ich hab das mit den parametern jetzt auf mehreren seiten ausprobiert (hab die daten an das script geschickt, das in <form action=tatata.php> stand), allerdings wurde ich nie eingeloggt, d.h. ich hab keine neue seite bekommen 😞



  • war bei dem form method=post oder method=get?
    Weil bei get hängst du die Variablen einfach nur an deine URL tatata.php?user=meinname&pass=geheim



  • ich weiß, wäre es get wäre ich schon seit 2 monaten durch, aber es ist teilweise leider post 😞



  • funktioniert es denn bei manchen?
    schickst du auch wirklich alles formularfelder mit?
    was bekommst du denn zurück, wenn es nicht funktioniert?



  • ich schicke alles mit imho (es ist auch ein "hidden" formularfeld dabei)
    als ausgabe bekomme ich die loginseite wieder angezeigt
    funktionieren tuts nur bei get 😞



  • Vielleicht prüfen die den HTTP_REFERER, also od du auch von denen ihrer Seite kommst? 🙄
    Oder setzen die irgendwelche Cookies?



  • ehehe, cookies werden gesetzt, macht das einen unterschied?



  • Ich will den Fehler jetzt nicht auf dich schieben, aber du hast von Posting zu Posting immer mehr "Parameter", des POST-Requestes, den ich ziemlich am Anfang mal geschrieben habe, weggelassen. Braucht man nicht, hab ich mir auch gedacht. Hab sie aber bei mir immer verwendet, da sie der IE genau so schickt.

    Nach einem bisschen experimentieren:
    zu einem Ordnungsgemäßen Reqest gehört scheinbar das "Attribut" "Content-Type" hinzu.

    So kommt bei mir die Login-Seite mit der Meldung/Beschwerde über ein falsches Passwort:
    [cpp]
    char passwort[256]={"deinpasswort"};
    char benutzerid[256]={"benutzerid"};
    int len;
    len=sprintf( buffer, "POST http://www.klamm.de/partner/start_login.php HTTP/1.0\nAccept-Language: de\nContent-Type: application/x-www-form-urlencoded\nPragma: no-cache\nHost: [url=http://www.klamm.de\nContent-Length]www.klamm.de\nContent-Length[/url]: %d\n\nloginid=%s&passwd=%s\r\n",16+strlen(benutzerid)+strlen(passwort), benutzerid, passwort);
    send(Socket, buffer, len, 0);[/cpp]
    Mach das und es geht auch bei dir, versprochen 🙂



  • Vielleich schauen die, ob die Cookie-Daten gesetzt sind, und falls nicht kannst du dich nicht einloggen!
    Cookies werden z.B. oft genutzt, um deine Session-ID zu übermitteln!



  • Noch ein Tipp, den ich dir vieleicht etwas früher hätte geben sollen(:D):

    1. Schreib einen mini Server, der auf irgendeinem Port auf einkommende Verbindunge wartet und alles empfangene anzeigt oder in einer Datei speichert.
    2. Geh nun auf die Login-Seite mit dem Login-Button.
    3. Starte deinen mini Server.
    4. Trage beim IE als HTTP-Proxy 127.0.0.1 als IP und die Portnummer des Servers als Port ein.
    5. Klick auf den Submitbutton.

    --> Dein mini Server empfängt genau den Request, den der IE schickt. Den kannst du dann auch von deinem Prog aus senden.



  • Mal eine Frage: Wie groß ist Content-Length? Wie kommst du auf 16?


Anmelden zum Antworten