Bild herunterladen via. Url



  • Guten Tag,

    Ich habe nun mehrmals versucht mit C++ mithilfe der boost.asio Libary Bilder vom Internet herunterzuladen leider bekomme ich jedes mal wieder Meldung, HTTP/1.1 Moved Permanently. Ich weiß nicht was ich jetzt tun soll, ich bitte um Rat.

    #include <iostream>
    #include <fstream>
    #include <boost/asio.hpp>
    
    using namespace std;
    
    int main()
    {
        
        boost::asio::io_context io;
        boost::asio::ip::tcp::socket socket(io);
        boost::asio::ip::tcp::resolver resolver(io);
        boost::asio::ip::tcp::resolver::query q("cdn.discordapp.com", "http");
        boost::asio::ip::tcp::resolver::iterator it = resolver.resolve(q);
        boost::asio::ip::tcp::resolver::iterator end;
    
        boost::system::error_code ec;
        boost::asio::ip::tcp::endpoint server;
    
        while (it != end) {
            server = *it++;
            cout << "IP: " << server.address().to_string() << endl;
        }
    
        socket.connect(server, ec);
    
        if (ec) {
            cout << "Verbindung konnte nicht hergestellt werden!";
        }
        else {
            cout << "Verbindung wurde hergestellt!" << endl;
        }
    
    
        string http = "GET /attachments/799271415445979136/823598888904032266/Herunterladen.jpg HTTP/1.1\r\n";
        http += "Host: cdn.discordapp.com\r\n";
        http += "Connection: close\r\n\r\n";
    
        socket.write_some(boost::asio::buffer(http), ec);
    
        if (ec) {
            cout << "HTTP-Request konnte nicht versendet werden!" << endl;
        }
        else {
            cout << "HTTP-Request versendet!" << endl;
        }
    
    
        ofstream datei("pic.jpg", ios::binary);
        char buffer[4028];
    
        boost::system::error_code read_ec;
    
        while (!read_ec) {
            int len = socket.read_some(boost::asio::buffer(buffer), read_ec);
    
            datei.write(buffer, len);
    
            cout.write(buffer, len);
    
            ZeroMemory(buffer, sizeof(buffer));
    
        }
    
        return 0;
    
    
    
    
    }
    

    Mit freundlichen Grüßen



  • 1.) Quelltext posten



  • @DocShoe Habe den Source-Code jetzt hinzugefügt nicht der schönste Code war ja nur kurz zu Test-Zwecken.



  • 301 (Moved Permanently) ist ein HTTP Status Code der für "Redirections" verwendet wird. Wenn dein Client das können soll, dann musst du es eben implementieren.

    Alternativ kannst du dir eine fertige HTTP Client Implementierung suchen die das bereits kann.



  • da wir uns in 2021 befinden, wuerde ich mal vermuten, dass dein request von http auf https redirected wird.
    Also moeglicherweise einfach von vornherein das richtige protokoll verwenden und schauen obs dann ohne redirect funktioniert.



  • @Cardiac Danke hat funktioniert 🙂


Log in to reply