![]() |
ISAPI und POST
Hallo und frohes Fest!
Jemand eine Ahnung wie man mit der Methode POST gesendeten Text empfängt? Ich arbeite mit der isapi2.pas von Borland! MfG und schon mal vielen Dank! |
Re: ISAPI und POST
Die entsprechenden Daten stehen kodiert im HTTP-Header. Also einfach den Header parsen ;)
Weiteres findest du in den entsprechenden RFCs |
Re: ISAPI und POST
Das klingt ja ganz gut, aber ich weiss nicht in welcher Variable ich das im ECB finde. Kannst mir da auch helfen?
|
Re: ISAPI und POST
Zitat:
Dieser ist entsprechend der RFCs kodiert. Der Rest sollte einfach sein ;) |
Re: ISAPI und POST
Ja das geht so. In meinem Spezialfall muss ich nicht mal auf POST prüfen. Die ersten 48KB kann ich im ECB.lpbCont abrufen, was aber ein Zeiger ist, und ich bekomm es nicht so recht hin. Muss ich wohl noch ein wenig testen... Danke schon mal
|
Re: ISAPI und POST
Das sollten lesbare Bytes sein. Ich würde es an deiner Stelle also etwa so machen (Achtung, die Namen der ECB-Member mußt du evtl. anpassen):
Delphi-Quellcode:
Wenn natürlich der Content-Type etwas anderes aussagt, mußt du unter Umständen die Daten konvertieren, zB von UTF8 nach WideString oder sowas.
var x:String; dwSize:DWORD;
// Größe aus ECB ermitteln dwSize = ECB.cbAvailable; // Größe des Stringpuffers festlegen (+1 wegen Nullterminierung) SetLength(x, dwSize+1); // Puffer mit NUllen füllen ZeroMemory(@x[1], dwSize+1); // Daten lesen ECB.ReadClient(ConnID, Pointer(@x[1]), dwSize); // Größe an echte Stringlänge anpassen - HTTP sendet normal nur printable ASCII, kein EASCII SetLength(x, lstrlen(@x[1])); Statt ECB.ReadClient() könnte theoretisch auch ein
Code:
gehen! Wie gesagt, ich kann es selber nicht testen und das letztemal hatte ich mit ISAPI vor 3 oder 4 Jahren zu tun.
CopyMemory(@s[1], ECB.lpbData, dwSize);
|
Re: ISAPI und POST
Gut ich habe das jetzt mal so ausprobieren wollen. Ich bin aber auf ein paar Probleme gestoßen.
1. Die Funktion ZeroMemory ist meinem Delphi (Delphi 6 PE) nicht bekannt 2. Die Funktion lstrlen sagt meinem Delphi auch nichts 3. Wenn ich die dll mal ohne die beiden betreffenden Zeilen kompiliere und teste, bekomme ich natürlich nur Müll, den ich aber auch nicht im geringsten nachvollziehen kann:
Code:
1:41 war die Uhrzeit, und der Rest ist zwar aus meinem HTML-Template, hat aber ja sonst nichts damit zu tun - und ist arg zerstückelt. Das Euro-Symbol, äh, ja, das entzieht sich vollkommen meiner Kenntnis.
1:41(<div align="center" class="minim€
|
Re: ISAPI und POST
Binde Windows.pas für die fehlenden Funktionen ein.
|
Re: ISAPI und POST
So, nu im neuen Jahr hab ich endlich wieder Zeit dazu gefunden.
Ich habe den Code entsprechend geändert, aber nun bekomme ich gar nichts mehr :-( Code ist so wie du es gesagt hast:
Delphi-Quellcode:
(Natürlich gekürzt)
var
ResStr, POST: string; StrLen, dwSize: DWORD; if ECB.lpszQueryString = 'mailto' then begin // Größe aus ECB ermitteln dwSize := ECB.cbAvailable; // Größe des Stringpuffers festlegen (+1 wegen Nullterminierung) SetLength(POST, dwSize+1); // Puffer mit NUllen füllen ZeroMemory(@POST[1], dwSize+1); // Daten lesen ECB.ReadClient(ECB.ConnID, Pointer(@POST[1]), dwSize); // Größe an echte Stringlänge anpassen - HTTP sendet normal nur printable ASCII, kein EASCII SetLength(POST, lstrlen(@POST[1])); ResStr := POST; end; ResStr := Format( 'HTTP/1.0 200 OK'#13#10'Content-Type: text/html'#13#10+ 'Content-Length: %d'#13#10'Content:'#13#10#13#10'%s', [Length(ResStr), ResStr]); StrLen := Length(ResStr); ECB.dwHTTPStatusCode := 200; ECB.WriteClient(ECB.ConnID, Pointer(ResStr), StrLen, 0); Result := HSE_STATUS_SUCCESS; Fehlermeldungen gibt es keine mehr. Dann noch, der Vollständigkeit halber, der HTML-Code:
Code:
Ich kann das echt nicht nachvollziehen, das da nun nichts mehr zurückgeliefert wird. Eine Idee?
<table width="95%" border="0" cellspacing="0" cellpadding="0" align="right">
<tr> <td> [img]images/top.jpg[/img] <div align="center"> <form action="game.dll?mailto" method="post" enctype="text/plain"> <table> <tr><td align="right">Absender: </td><td><input name="absender" type="text" size="35" maxlength="25"></td></tr> <tr><td align="right">Betreff: </td><td><input name="betreff" type="text" size="35" maxlength="75"</td></tr> <tr><td align="right">Nachricht: </td><td><textarea name="nachricht" cols="30" rows="10"></textarea></td></tr> <tr><td></td><td><input type="submit" class="Button" value="Absenden"></td></tr> </table> </form> </div> </td> </tr> </table> </td> |
Re: ISAPI und POST
Echt keiner eine Idee? Ich verzweifel hier noch :-(
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz