Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature currently requires accessing the site using the built-in Safari browser.
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