TCP-Connect zu Web-Page



  • Hoppla, danke!

    War das wirklich dringestanden?
    Dachte ich hatte 'geheim' reingeschrieben.

    Thx"

    PS: Das mit dem GET URL HTTP/1.0 hab ich verstanden, aber das mit POST hab ich aus der RFC nich so richtig verstehen können 😞

    [ Dieser Beitrag wurde am 22.05.2003 um 12:35 Uhr von Askyer editiert. ]



  • Wenn du oben auf "hier" klickst, dann kommst du in ein HTTP-Tutorial das den Post-Vorgang recht einfach erklärt...

    jo, stand oben drin... dachte erst ob ich dir ne Notiz hinterlegen soll... (nach dem login) vielleicht solltest du das Passwort sicherheitshalber ändern... (geht ja bei den Einstellungen wenn ich das richtig gesehen hab, Collonel (o; )

    -junix



  • Bei Verwendung von TIdHTTP aber mal einen Blick in die FAQ werfen. POST ist nicht gerade unproblematisch.



  • Hi!

    Also so wie ich das gelesen habe muss ich das wenn ich es an die url anhänge mit GET machen, aber das Senden von:

    GET http://www.droidwars.de/php/login.php4?uname=Askyer&upasswort=xxxx&login=Login  HTTP/1.0\n
    

    ergibt die gleiche antwort vom Server 😕



  • Versende die Argumente mal mit Post und verwende HTTP/1.1

    -junix



  • Ahja und
    "GET http://www.droidwars.de/php/login.php4?uname=Askyer&upasswort=xxxx&login=Login HTTP/1.0\n" ist noch immer kein gültiger Request!!

    -junix



  • Bevor ichs vergesse: bau mal den Request so oder so etwas aus. Kein Browser sendet nur die Get-Zeile... Mindestens Hostname: wird noch gesetzt. Ich denke die jungs wollen sich sicher auch vor Bots schützen und achten vermutlich etwas auf die Requests...

    -junix



  • Hi!

    Habs irgendwie nicht verstanden das Beispiel:

    POST /path/script.cgi HTTP/1.0
    From: frog@jmarshall.com
    User-Agent: HTTPTool/1.0
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 32

    home=Cosby&favorite+flavor=flies

    Was soll denn das mit der E-Mail-Addy und diesem HTTPTool. Muss ich das alles senden oder was?

    Könntest du mir vielleicht ein beispiel machen, wie ich meine 3 Daten damit sende, damit ich es vielleicht besser verstehe? Die Zeilen Sende ich einzeln mit WriteLN, oder? Irgendwie ist die Erklärung nich so gut 😕



  • Also: Jede Zeile im HTTP hat mit CRLF (\r\n) zu enden. In der Indy-Hilfe kannst du nachlesen, dass WriteLn automatisch jeden String nach dem Senden mit EOL abschliesst. Wenn du dem Link der hinter EOL steht nachgehst erfährst du, dass EOL = CR + LF.

    Das heisst also, du kannst dir die Zeilenumbruch-Buchstaben sparen und einfach z.B. WriteLn("POST /path/script.cgi HTTP/1.0") schreiben.

    Zum Request. Folgende Felder solltest du mindestens enthalten:

    POST /path/script.cgi HTTP/1.0
    User-Agent: Askyer HTTP-Client
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 32

    home=Cosby&favorite+flavor=flies

    Die erste Zeile kennst du ja.
    Der User-Agent ist die Browser-Kennung... in deinem Fall würde im Log des Webservers also z.B. "Askyer HTTP-Client" als Browser erscheinen. Content-Type beschreibt den Typ der Daten die du dem Server sendest. application/x-www-form-urlencoded ist die übliche Form wie sie browser versenden. (Deine Parameter kannst du per URLEncode() (im Indypaket enthalten) passend codieren.
    Content-Length: ist die Anzahl zeichen die in den Daten zu finden sind.
    Dann kommt eine Leerzeile (also WriteLn()) und anschliessend kommen die Daten so wie dus von GET-Request her kennst, alles ab dem ?. Beendet wird der Request mit 2 WriteLn() (also 2 CRLF)

    -junix



  • Hi!

    Vielen Dank für die starke Erklärung 🙂

    So sollte es in dem Text stehen.

    Werds mal probieren.



  • Original erstellt von Askyer:
    So sollte es in dem Text stehen.

    Stehts doch? hald einfach in Englisch... Ahja noch zum Thema URLEncode: Das ist recht wichtig damit allfällige Spezialzeichen codiert werden müssen!

    -junix



  • Hi!

    Ich nehme mal an, das ich anstatt eine cgi-Datei auch eine php4-Datei mit dem Post benutzen kann.

    Ich hab das jetzt wie folgt gemacht:

    TCP->Connect();
            TCP->WriteLn("POST http://www.droidwars.de/php/login.php4   HTTP/1.0");
            TCP->WriteLn("User-Agent: Subby HTTP-Client");
            TCP->WriteLn("Content-Type: application/x-www-form-urlencoded");
            TCP->WriteLn("Content-Length: 32");
            TCP->WriteLn();
            TCP->WriteLn("uname=Subby&upasswort=geheim&login=Login");
            TCP->WriteLn();
            TCP->WriteLn();
    

    als antwort immernoch:

    HTTP/1.1 200 OK
    Date: Thu, 22 May 2003 12:22:42 GMT
    Server: Apache
    Set-Cookie: username=deleted; expires=Wed, 22-May-02 12:22:41 GMT
    Set-Cookie: userpasswort=deleted; expires=Wed, 22-May-02 12:22:41 GMT
    Set-Cookie: username=Subby
    Set-Cookie: userpasswort=geheim
    Connection: close
    Content-Type: text/html

    <html>
    <head>
    <link rel="stylesheet" type="text/css" href="../css/droid_links.css"></link>
    </head>
    <body>

    [EDIT]Sehe grad Content-Length ist falsch... Probiers gleich nochmal...[/EDIT]

    [ Dieser Beitrag wurde am 22.05.2003 um 14:27 Uhr von Askyer editiert. ]



  • Original erstellt von Askyer:
    **

    TCP->WriteLn("POST http://www.droidwars.de/php/login.php4      HTTP/1.0");
    

    **

    Falsch

    Schau dir mal das Beispiel an.Den Hostnamen musst du nichtmehr angeben. es reicht /php/login.php4.
    Dafür könntest du gleich als 2. Zeile noch

    Hostname: www.droidwars.de
    

    senden.

    Ahja und die Content-Length wird sicher berechnet und nicht hart codiert (o;

    -junix

    [ Dieser Beitrag wurde am 22.05.2003 um 14:41 Uhr von junix editiert. ]



  • Ja, hab ich gemacht, aber ob man den hostnamen anhängt oder nicht, ist ja egal, oder? Also nicht falsch.

    Jedenfall ist mein Problem jetzt eher, was ich mit der komischen ausgabe anfange... Das ist nicht die Page, auf die ich komme, wenn ich die URL mit den angehängten daten angebe.



  • Original erstellt von Askyer:
    Das ist nicht die Page, auf die ich komme, wenn ich die URL mit den angehängten daten angebe.

    Eben.... du bekommst nicht das was du erwartest jetzt musst du sehen wo der fehler ist. Die Grösste Fehlerquelle ist im MOment ein falscher/nicht kompletter Request. Also musst du jetzt mal erst den Request für "Echt" erscheinen lassen. Wie ich sagte. Ich wette die jungs hams ned gern wenn da einer mit Bots wurschtelt also könnts gut auch sein, dass die auf solche Sachen achten um Bots zu erkennen. Was du auch mal machen kannst ist, einen ServerSocket öffnen auf port xy und das Loginformular runterladen und so umbauen, dass das Ziel des formulars deine Serveranwendung ist und dir anschauen, was der IE denn für nen Request sendet und ihn dann mit deinem vergleichen. So hab ich angefangen mit dem ganzen Zeugs als ich meine Bots für den ProsiebenChat gebastelt habe (o:

    -junix


Anmelden zum Antworten