HTML-Inhalt auslesen und zur String-Variable setzen?



  • Hallo, ich suche gerade eine Methode um einen HTML-Inhalt via CPP auszulesen und ihn danach in einer String-Variable zu setzen.

    Ich will halt ein simplen Server-Status, dass man sieht ob der Server on ist, oder off. Und das soll halt über HTML (Dort steht nur drin "ONLINE" oder "OFFLINE" in der index.php) eine Variable definiert werden. Ich suche schon seit 3 Stunden und finde einfach nichts.

    Freue mich über eure Hilfe, gruß.



  • @AmKoma sagte in HTML-Inhalt auslesen und zur String-Variable setzen?:

    Ich suche schon seit 3 Stunden und finde einfach nichts.

    Irgendwas machst du falsch.



  • Uff, sieht schwer aus. Kann mir jemand helfen? Ich arbeite noch nicht all zu lange mit C++ 😃



  • @AmKoma Das html zu parsen sollte doch gar nicht nötig sein.
    Es steht ja nur "online" bzw. "offline" drin.

    Verbindung aufbauen und in einen string lesen bis die Verbindung vom Server beendet wird.

    Allerdings sollte ein erfolgreicher Verbindungsaufbau fast schon reichen.



  • Aber wie? Ich hab schon so viel versucht, gefühlt schon 20 Code-Snippets versucht

    z.B.:

    #include <curl/curl.h>
    
    int main(void)
    {
    	CURL *curl;
    	CURLcode res;
    
    	curl = curl_easy_init();
    	if (curl) {
    		curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
    		res = curl_easy_perform(curl);
    
    		/* always cleanup */
    		curl_easy_cleanup(curl);
    	}
    	return 0;
    }
    

    Jedoch weiß ich dort nicht, wie ich das Ergebnis in einer String-Variable packe, und VS erkennt nicht mal libcurl obwohl es im richtigen Ordner sitzt, ich es mit vcpkg und die aktuelle Version habe.



  • Du brauchst da bei cURL ne Writefunction. Hier mal ein C-Beispiel. Das kannst du ja etwas abändern. https://stackoverflow.com/questions/2329571/c-libcurl-get-output-into-a-string



  • Und weil im C++-Forum und Visual Studio genannt wurde:

    #include <cstdlib>
    #include <iostream>
    #include <string>
    
    #include <curl/curl.h>
    #pragma comment(lib, "ws2_32.lib")
    #pragma comment(lib, "./packages/curl.7.30.0.2/build/native/lib/v110/x64/debug/dynamic/libcurl.lib")
    
    size_t write_callback(char *ptr, std::size_t size, std::size_t nmemb, void *userdata)
    {
    	(void)size;
    	auto dst{ reinterpret_cast<std::string*>(userdata) };
    	dst->append(ptr, nmemb);
    	return nmemb;
    }
    
    int main()
    {
    	auto curl{ curl_easy_init() };
    	if (!curl) {
    		std::cerr << "curl initialization failed :(\n\n";
    		return EXIT_FAILURE;
    	}
    
    	curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com");
    
    	std::string data;
    	curl_easy_setopt(curl, CURLOPT_WRITEDATA, reinterpret_cast<void*>(&data));
    	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
    
    	if (curl_easy_perform(curl) != CURLE_OK) {
    		std::cerr << "request failed :(\n\n";
    		curl_easy_cleanup(curl);
    		return EXIT_FAILURE;
    	}
    
    	std::cout << data << "\n\n";
    
    	curl_easy_cleanup(curl);
    }
    


  • Gibt es einen Grund das nicht in Python zu machen (oder ping)? Wäre praktisch ein Einzeiler... Ich mein ja nur... Pick the right tool for the job



  • @HarteWare sagte in HTML-Inhalt auslesen und zur String-Variable setzen?:

    (oder ping)?

    Das sagt ja nur aus, ob der Server (die "Hardware") erreichbar ist.
    Es sagt nichts darüber aus, ob es dort auch den virtuellen Server gibt, bzw. ob der überhaupt läuft.


Log in to reply