Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
std::stringstream AllData;
unsigned long len;
do{
char buffer[1024];
InternetReadFile(hUrl, buffer, sizeof buffer, &len);
buffer[len] = '\0';
AllData << buffer;
} while(len);
if (HttpSendRequest(request, NULL, 0, NULL, 0)) {
unsigned long len;
std::stringstream ssBuffer;
do{
char antwortbuffer[1024];
InternetReadFile(request, antwortbuffer, sizeof antwortbuffer, &len);
antwortbuffer[len] = '\0';
ssBuffer << antwortbuffer;
} while(len);
// das folgende ist von mir
// Ziel ist es, den ssBuffer in eine std::wstring Variable zu kriegen
std::string stmp;
std::wstring wstmp;
stmp = ssBuffer.str();
wstmp = StringToWString(stmp);
std::cout << "sendRequest(): " << stmp << "EOL" << std::endl;
std::cout << "sendRequest(): " << strlen(stmp.c_str()) << std::endl;
std::wcout << "sendRequest(): " << wstmp << "EOL" << std::endl;
std::wcout << "sendRequest(): " << _tcslen(wstmp.c_str()) << std::endl;
result = 1;
} else {
// mach was anders
}
OKEOLequest():
sendRequest(): 3
OKEOLequest():
sendRequest(): 3
void test1() {
char cBuff[100] = "Hallo Welt";
std::stringstream ssBuffer;
ssBuffer << cBuff;
std::string s1;
s1 = ssBuffer.str();
std::cout << "test1(): " << s1 << "EOL" << std::endl;
std::cout << "test1(): " << strlen(s1.c_str()) << std::endl;
}
test1(): Hallo WeltEOL
test1(): 10
stmp.substr(0, stmp.length() -1)
Weil offenbar ein \r Zeichen mit zurückgegeben wird.Die Webseite liefert je nach Request "OK", "FORBIDDEN", "UNAUTHORIZED", "ERROR", ... zurück
Was raus kommt, wenn die Seite "OK" zurückgibt, ist folgendes:
Code:OKEOLequest(): sendRequest(): 3 OKEOLequest(): sendRequest(): 3
Und ich poste, weil ich das nicht versteh':
- Warum beträgt die Länge 3, wenn doch nur "OK" zurückgegeben wird?
Weil ein \r Zeichen in dem String ist.- Warum wird bei "sendRequest():" die ersten 5 Zeichen mit "OKEOL" überschrieben? Ich würde nämlich folgenden Output erwarten: sendRequest(): OKEOL
const DWORD buflen = 1024;
char buf[buflen];
DWORD len;
std::string data;
bool success;
while ((success = InternetReadFile(request, buf, buflen, &len)) && len != 0) {
data.append(buf, len);
}
if (success) {
std::cout << "data length: " << data.length() << std::endl;
} else {
// Fehler, GetLastError() etc.
}
Das \r Zeichen ist das erste Zeichen im String, du müßtest also das erste Zeichen entfernen (oder den Server dazu bringen die Antworten zu liefern, die du erwartest).Ich habe versucht mit std::substr() das letzte Zeichen (
Code:
stmp.substr(0, stmp.length() -1)
) abzuschneiden, aber dann erhalte ich nur noch "O" mit der Länge 2.
Da hast Du recht und danke für den Hinweis. der Code war nur ein Gebastel (C++ Euphorie hatTE mich gepackt).Man sollte sich an die MSDN halten wenn man die Funktionen benutzt und immer den Rückgabewert prüfen