URL Öffnen und Durchsuchen



  • Hallo liebe C++ gemeinde,

    ich habe vor Jahren ein Programm in Python Script geschrieben das ich jetzt in C++ Umsätzen möchte und stoße dabei an meine grenzen.

    und zwar: ich möchte eine URL (nicht in externem Programm) öffnen und dann prüfen ob eine Zeichenkette vorhanden bzw. nicht vorhanden ist.

    in Python schaut das wie folgt aus:

    url = urllib.urlopen("http://www.test.de/test&verz=settings&commandd=" + variable )
    
    content = url.read()
    
    url.close()
    
    if re.search(r"test", content) == None:
    

    für ein Beispiel in C++ wäre ich sehr dankbar.

    MFG Daniel 😉



  • #include <boost/asio.hpp> 
    #include <boost/array.hpp> 
    #include <iostream> 
    #include <string> 
    
    boost::asio::io_service io_service; 
    boost::asio::ip::tcp::resolver resolver(io_service); 
    boost::asio::ip::tcp::socket sock(io_service); 
    boost::array<char, 4096> buffer; 
    
    void read_handler(const boost::system::error_code &ec, std::size_t bytes_transferred) 
    { 
    	 if (!ec) 
    	 { 
    		std::cout << std::string(buffer.data(), bytes_transferred) << std::endl; 
    	    sock.async_read_some(boost::asio::buffer(buffer), read_handler); 
         } 
    } 
    
    void connect_handler(const boost::system::error_code &ec) 
    { 
    	if (!ec) 
    	{ 
    		boost::asio::write(sock, boost::asio::buffer("GET / HTTP 1.1\r\nHost: c-plusplus.net\r\n\r\n")); 
    		sock.async_read_some(boost::asio::buffer(buffer), read_handler); 
        } 
    } 
    
    void resolve_handler(const boost::system::error_code &ec, boost::asio::ip::tcp::resolver::iterator it) 
    { 
    	if (!ec) 
    	{ 
    		sock.async_connect(*it, connect_handler); 
        } 
    } 
    
    int main() 
    { 
    	boost::array<char, 4096>::iterator it(buffer.begin());
    
    	boost::asio::ip::tcp::resolver::query query("www.c-plusplus.net", "80"); 
    	resolver.async_resolve(query, resolve_handler); 
    	io_service.run(); 
    
    	for(; it != buffer.end(); ++it)
    	{
    		if((*it == 'A')
    		 &&(*it++ == 'B')) // Und so weiter...
    		 std::cout<<"Jo ey, voll gefundet getutet"<<std::endl;
    	}
    }
    

    Ungetestet

    EDIT:
    Lol sorry, der Iterator darf natürlich nicht const sein^^



  • Hy Danke Kóyaánasqatsi,

    vielen dank das ging sehr schnell!!!

    MFG Daniel


Anmelden zum Antworten