WinInet

Thomasio

Erfahrenes Mitglied
Meine allerersten Versuche mit WinInet schauen nicht besonders rosig aus, aber vielleicht kann mir ja hier jemand helfen
Ich sag gleich zu Anfang nochmal dazu, ich mache das nur zum lernen, ohne echten Zweck

Was ich gemacht habe ist eine Mini Anwendung, die via WinInet ein php Script auf meiner hp aufruft
Das Script liest aus einer MySQL Datenbank ein Textfeld und gibt den Inhalt völlig unformatiert zurück, kein html, kein gar nichts, einfach Text, und weils wirklich nur zum testen ist, habe ich einfach selbst einen Text in das Datenbankfeld geschrieben, der wirklich ausschliesslich Buschstaben und Zahlen enthält, keine Zeilenumbrüche, keine Sonderzeichen
Die Anwendung zeigt dann den Text einfach in einem edit Feld an

Das Ganze funktioniert zuerst mal, mit einem kleinen Problem
WENN der Text länger als 1293 Zeichen wird, dann zeigt er bei mir immer noch alles richtig an, aber bei einem Kumpel von mir nur die ersten 1293 Zeichen

Ganz offensichtlich liegt das irgendwie an Paketgrössen und/oder Cache, aber ich finde nicht heraus, wie ich meine Anwendung dazu bringe es auch bei meinem Kumpel richtig anzuzeigen
Ich habe schon mit den flags herum experimentiert
INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE
usw.
aber das Richtige habe ich nicht gefunden, zumindest funktioniert es bei mir immer und bei meinem Kumpel nur bis zu 1293 byte, egal was ich an flags setze

Hat jemand einen Tipp?
 
Mit welcher Methode rufst du die URL auf? Per POST oder GET? Bei GET ist die Länge der URL teilweise begrenzt. Bei POST muss man evtl. Parameter in den Body packen, aber dafür ist die Länge unbegrenzt.
 
Was ich mache ist (Errorhandling lasse ich mal weg wegen der Übersicht)

Code:
static TCHAR hdrs[]    = TEXT("Content-Type: application/x-www-form-urlencoded");
HINTERNET inet = InternetOpen("MyAgent", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
HINTERNET connection;
HINTERNET request;
unsigned long flags;
char antwortbuffer[10000];
unsigned long len;
connection = InternetConnect(inet, TEXT(domainurl), INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
flags = INTERNET_FLAG_PRAGMA_NOCACHE;
request = HttpOpenRequest(connection, "POST", TEXT(scriptname), NULL, NULL, NULL, flags, 1);
HttpSendRequest(request, hdrs, strlen(hdrs), "whatever I want to Post", strlen("whatever I want to Post"));
InternetReadFile(request, antwortbuffer, sizeof antwortbuffer, &len);
antwortbuffer[len] = '\0';
InternetCloseHandle(request);
InternetCloseHandle(connection);
InternetCloseHandle(inet);

Ich habe damit herum experimentiert, ich kann cookies setzen, alles mögliche POSTen, und der Server antwortet darauf, als ob ein Browser das Script aufgerufen hätte
Nur wenn die Antwort länger als 1293 Byte wird gibt es bei manchen Usern Murks
Ich habe bei MSDN eine Anmerkung gefunden, um unvollständige Buffer zu vermeiden muss man InternetReadFile wiederholen, bis TRUE ist, aber ich habe nicht herausgefunden, warum das nur manchmal unvollständig ist und meine bescheidenen Anfänger Kenntnisse reichen nicht, um das Ganze in eine Schleife zu packen wo die Daten vom Server häppchenweise zusammengestückelt werden
 
Zurück