HTTP-Get mittels WinInet schreiben - Problem mit der URL



  • Hallo!

    Ich hab ein Problem und keine Ahnung, wie ich es lösen soll. Ich will über HTTP eine Datei laden (einfach eine Webseite oder so ähnlich) und irgendwie ausgeben oder speichern. Das ganze soll auf einem PDA mit Windows Mobile 5 laufen. Daher verwende ich WinInet (die WinInet MFCs sind in Windows Mobile 5 nicht mehr enthalten).

    Hier mein derzeitiger Code (ist ein bißchen aufgebläht, weil ich keine Konsole hab):

    HINTERNET netHandle = 0, urlHandle = 0;
    //buffer in which will be written
    char buffer[2048];
    //number of bytes read
    DWORD read;
    //the result
    string *result;
    
    /*starting the log
     *remember: it should run on Windows Mobile 5, so there is no command shell available
     */
    ofstream *output = new ofstream();
    output->open("\\SD Card\\log.txt", ios_base::out);
    
    netHandle = InternetOpen(reinterpret_cast<LPCWSTR>("name_of_func"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    
    if(!netHandle)
    {
    	*output << "aborted: InternetOpen failed" << endl;
    	*output << "Error: " << GetLastError() << endl;
    	output->close();
    	delete output;
    	return;
    }
    *output << "InternetOpen succeeded" << endl;
    
    //the next statement fails
    urlHandle = InternetOpenUrl (netHandle, reinterpret_cast<LPCWSTR>("http://www.microsoft.com/"), NULL, 0, 0, 0);
    
    if(!urlHandle)
    {
    	InternetCloseHandle(netHandle);
    	*output << "aborted: InternetOpenUrl failed" << endl;
    	*output << "Error: " << GetLastError() << endl;
    	output->close();
    	delete output;
    	return;
    }
    
    result = new string();
    
    do
    {
    	InternetReadFile(urlHandle, buffer, 255, &read);
    	buffer[read] = '\0';
    	result->append(buffer);
    } while (read == 255);
    
    *output << *result << endl;
    output->close();
    
    InternetCloseHandle(urlHandle);
    InternetCloseHandle(netHandle);
    
    delete result;
    delete output;
    
    return;
    

    Das ganze bricht nach InternetOpenUrl ab. Hier meine kleine Log-Datei:

    InternetOpen succeeded
    aborted: InternetOpenUrl failed
    Error: 12006
    

    Anmerkung:
    Error 12006: ERROR_INTERNET_UNRECOGNIZED_SCHEME - The URL scheme could not be recognized or is not supported.
    Ich vermute den Fehler bei der Formatierung der URL in der Funktion InternetOpenUrl. Aber mir sind schon die Ideen ausgegangen... 😕
    WinInet verwendet intern die Funktion InternetOpenW bzw. InternetOpenUrlW, weil das UNICODE-Flag gesetzt ist (siehe wininet.h). Aber auch mit InternetOpenA und InternetOpenUrlA funktionierts nicht.
    Wenn ich's für x86 kompiliere und auf meinem PC ausführe, verhält es sich genau gleich.
    Inkludiert sind windows.h, wininet.h, <string> und <fstream>, der Namespace std wird verwendet.

    Ich zähl jetzt einfach darauf, dass der Fehler schon jemandem untergekommen ist. Danke im Voraus!

    Verzweifelte Grüße,
    gottfried



  • das reinterpret_cast<LPCWSTR> ist völlig falsch.

    TEXT("name_of_func") bzw. L"name_of_func" wäre richtig.



  • Traue nie deinem Compiler...

    Danke! 🙂
    Nächstes Problem: Error 12029 (ERROR_INTERNET_CANNOT_CONNECT - The attempt to connect to the server failed.) Der heutige Tag wird noch lang...


Log in to reply