WinInet POST
-
Ich habe mein WinInet so weit fertig, dass ich aus meiner Anwendung Daten an ein php script auf meiner hp posten und die Antwort von dort auch empfangen kann, grübel nur gerade daran, wie das mit Sonderzeichen aussieht
Die zu sendenden Daten liegen in
static TCHAR frmdata[] = _T("feldname1=text text text&feld2=noch mehr text");
Was passiert nun, wenn der text Sonderzeichen wie ' \ & % usw enthält?
Wenn ich es richtig verstanden habe werden die Zeichen automatisch escaped, so dass ich im php script nach stripslashes() korrekte Daten habe, aber stimmt das so?
Noch grausamer wird es, wenn der Text Zeichen enthält, die ich schon beim bauen des TCHAR escapen muss, und wenn ich den TCHAR via GetWindowText() aus mehreren Eingabedialogen zusammenbauen will, verliere ich endgültig den Überblick, was da wann escaped werden muss und was am Ende beim Server ankommtBevor ich jetzt auf Trial & Error mache, frage ich doch mal nach, vielleicht hat jemand Erfahrung damit?
danke im voraus
-
ich kann dir zwar nicht weiterhelfen, aber mich wuerde interessieren wie du das ganze gehandelt hast? ich sitzte nun schon eine kleine weile ueber dem thema und bekomme nicht so richtig etwas zustande...
wollte deshalbt fragen, ob du mir deinen quellltextes bereitstellen koenntest?
wenn du den code nicht posten moechtest koennen wir das auch gerne per mail machen.wuerde mich freuen
-
kein Problem, Du wirst allerdings einige weitere Fehlerprüfungen einbauen müssen (da bin ich selbst gerade auch dabei)
bool ServerConnect () { static TCHAR hdrs[] = _T("Content-Type: application/x-www-form-urlencoded"); static TCHAR frmdata[] = _T("feldname1=text text text&feld2=noch mehr text"); HINTERNET inet = InternetOpen("MyAgent", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if (inet == NULL) MessageBox(NULL, "You must connect to the web first", "Error", MB_OK), exit(1); HINTERNET connection; HINTERNET request; unsigned long flags; char buffer[BUFSIZ]; unsigned long len; connection = InternetConnect(inet, _T("www.DeineDomain.com"), INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1); flags = INTERNET_FLAG_NO_AUTH | INTERNET_FLAG_NO_AUTO_REDIRECT | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_RELOAD | INTERNET_FLAG_PRAGMA_NOCACHE; request = HttpOpenRequest(connection, "POST", _T("path/filename.php"), NULL, NULL, NULL, flags, 1); HttpSendRequest(request, hdrs, strlen(hdrs), frmdata, strlen(frmdata)); InternetReadFile(request, buffer, sizeof buffer, &len); buffer[len] = '\0'; InternetCloseHandle(request); InternetCloseHandle(connection); InternetCloseHandle(inet); MessageBox(NULL, buffer, "Server Answer", MB_OK); }das php script bekommt die daten unter
_POST[feldname1] _POST[feld2]
kann diese auswerten, bearbeiten und antworten
es braucht für die antwort keinerlei html code, im gegenteil, der stört nur (sofern du keinen browser coden willst)wenn dein php script z.B. so aussieht:
<?php $antwort1 = strtoupper($_POST[feldname1]); $antwort2 = strtoupper($_POST[feld2]); print <<<END $antwort1 $antwort2 END; ?>dann bekommst Du in der MessageBox Deinen gesendeten Text in Grossbuchstaben zurück
nur wenn Sonderzeichen drin stehen wirds indisch, aber vielleicht kann uns das ja jemand beantworten?
-
vielen dank fuer den quellcode;
und weil du so nett warst bin ich nun auch nett
:
bastel dir eindach deinen string den du haben moechtest via sprintf...sprintf(frmdata, "feldname1=sch%cner tag... &feld2=n%cchstes mal...", 148, 132);
Ä: 142
ä: 132
Ö: 153
Ö: 148
Ü: 154
ü: 129
ß: 225achte drauf dass frmdata eine fix groesse hat sonst funktioniert sprintf nicht...
-
Mein Problem liegt nicht alleine im Basteln des string, sondern in der Kombination aus basteln, senden, bearbeiten, empfangen und anzeigen
mal angenommen, in meinen Eingabedialogen steht:
- Ich geh' gern zu "C + A" (da bekomme ich 10% Rabatt)
- a² + b² = c²
Nun brauche ich 6 Dinge:
- GetWindowText aus den Dialogen
- Hinzufügen der Feldnamen und Zusammensetzen des string
- Senden an php
- Bearbeiten in php
- Antwort von php empfangen
- Mit SetWindowText das Ergebnis wieder anzeigen
Mag sein, dass ich zu kompliziert denke, aber mir ist ohne ausprobieren nicht klar, was ich da wann wie escapen muss und was automatisch escaped wird, so dass ich nach SetWindowText das Richtige angezeigt bekomme
z.B. wird ein + als blank gesendet
"feldname1=Schoenes Wetter"
ist das Gleiche wie
"feldname1=Schoenes+Wetter"
was also wird aus
"C + A"?Wie kann ich sicherstellen, dass
a) der string korrekt gebaut wird
b) php den tatsächlichen Inhalt bekommt
c) php ein Ergebnis zurück sendet, was ich im Programm wieder splitten kann
d) das Ergebnis im Dialog korrekt angezeigt wird
völlig egal was in den Dialogen drin steht?