AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ISAPI und POST

Ein Thema von Jörn · begonnen am 26. Dez 2004 · letzter Beitrag vom 9. Jan 2005
Antwort Antwort
Jörn

Registriert seit: 5. Sep 2003
Ort: Helmstedt
312 Beiträge
 
#1

ISAPI und POST

  Alt 26. Dez 2004, 16:51
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!
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#2

Re: ISAPI und POST

  Alt 26. Dez 2004, 17:56
Die entsprechenden Daten stehen kodiert im HTTP-Header. Also einfach den Header parsen

Weiteres findest du in den entsprechenden RFCs
  Mit Zitat antworten Zitat
Jörn

Registriert seit: 5. Sep 2003
Ort: Helmstedt
312 Beiträge
 
#3

Re: ISAPI und POST

  Alt 26. Dez 2004, 18:14
Das klingt ja ganz gut, aber ich weiss nicht in welcher Variable ich das im ECB finde. Kannst mir da auch helfen?
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#4

Re: ISAPI und POST

  Alt 26. Dez 2004, 20:20
Zitat von Jörn:
Das klingt ja ganz gut, aber ich weiss nicht in welcher Variable ich das im ECB finde. Kannst mir da auch helfen?
Als erstes "lpszMethod" auf "POST" checken. Danach (glaube ich, kann es leider nirgends mehr testen!) per ReadClient() den Inhalt zu des POST Requests lesen (Größe steht im ECB).

Dieser ist entsprechend der RFCs kodiert. Der Rest sollte einfach sein
  Mit Zitat antworten Zitat
Jörn

Registriert seit: 5. Sep 2003
Ort: Helmstedt
312 Beiträge
 
#5

Re: ISAPI und POST

  Alt 27. Dez 2004, 04:05
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
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#6

Re: ISAPI und POST

  Alt 27. Dez 2004, 10:20
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:
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]));
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.

Statt ECB.ReadClient() könnte theoretisch auch ein
Code:
CopyMemory(@s[1], ECB.lpbData, dwSize);
gehen! Wie gesagt, ich kann es selber nicht testen und das letztemal hatte ich mit ISAPI vor 3 oder 4 Jahren zu tun.
  Mit Zitat antworten Zitat
Jörn

Registriert seit: 5. Sep 2003
Ort: Helmstedt
312 Beiträge
 
#7

Re: ISAPI und POST

  Alt 29. Dez 2004, 01:48
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(<div align="center" class="minim&#8364;
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.
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#8

Re: ISAPI und POST

  Alt 29. Dez 2004, 02:16
Binde Windows.pas für die fehlenden Funktionen ein.
  Mit Zitat antworten Zitat
Jörn

Registriert seit: 5. Sep 2003
Ort: Helmstedt
312 Beiträge
 
#9

Re: ISAPI und POST

  Alt 3. Jan 2005, 16:15
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:
var
  ResStr, POST: string;
  StrLen, dwSize: DWORD;

  if ECB.lpszQueryString = 'mailtothen
  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;
(Natürlich gekürzt)

Fehlermeldungen gibt es keine mehr. Dann noch, der Vollständigkeit halber, der HTML-Code:

Code:
<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>
Ich kann das echt nicht nachvollziehen, das da nun nichts mehr zurückgeliefert wird. Eine Idee?
  Mit Zitat antworten Zitat
Jörn

Registriert seit: 5. Sep 2003
Ort: Helmstedt
312 Beiträge
 
#10

Re: ISAPI und POST

  Alt 9. Jan 2005, 16:24
Echt keiner eine Idee? Ich verzweifel hier noch
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz