Hartnäckiges holen von WWW-Seiten



  • Hallo ! Ich benutze folgenden Code um Bilder von webseiten abzuspeichern :

    TFileStream *fs = new TFileStream(filename, fmCreate);
    httpindy->Get(URL,fs);
    delete fs;
    

    filename ist voher festgelegt (sowas wie img00001.jpg) und URL ist ewas in der Form "www.blah.de/dasbild.jpg".

    Meistens funktioniert das ganze doch manchmal bekomme ich einen "403 Forbidden" Fehler. Was wohl daran liegt das ich sehr viele Bilder nacheinander lade was dem Webserver nicht gefällt. Ich würde jetzt gerne wissen wie ich es anstelle das eine solche Fehlermeldung nicht das Programm abricht sondern wie ich sie abfangen kann und dann das Programm veranlassen kann es (evtl. mit einer wartezeit) es nocheinmal zu versuchen und das solange bis es das bild hat.

    Danke !



  • Hallo

    eventuell mit

    try
    {
      httpindy->Get(URL,fs);
      }
    catch(...)
    {
      // Meldung anzeigen
      // Starte einen TTimer, der nach einer gewissen Zeit den Aufruf wiederholt
      }
    

    bis bald
    akari



  • Ok i have changed it to this :

    TFileStream *fs = new TFileStream(filename, fmCreate);
    
    try {
         httpindy->Get(URL,fs);
        }
    
    catch (...)
        {
         ShowMessage("403 Error");
         ::Sleep(3000);
         Application->ProcessMessages();
         httpindy->Get(URL,fs);
        }
    
    delete fs;
    

    Aber der Fehler taucht weiterhin auf und zwar beim oberen request (der in den try klammern). Die Anweisungen in catch werden nie erreicht. Habe nicht viel Ahnung von try/catch - mache ich da villeicht was falsch oder ist dies keine Lösung in diesem Fall ?

    Danke !



  • Hallo

    Hat httpindy->get() vielleicht einen Rückgabewert, denn du auswerten kannst?
    Sorry, habe die Indy-komponenten selber nicht.

    bis bald
    akari



  • Hannah schrieb:

    Die Anweisungen in catch werden nie erreicht.

    Ganz sicher? Wenn du dein Programm aus der IDE heraus testest, darfst du beim Auftreten einer Exception nicht abbrechen, sondern musst einfach die Fehlermeldungen bestätigen. Dann läuft das Programm weiter und sollte auch den catch-Zweig erreichen.

    Immer vorausgesetzt, es handelt sich tatsächlich um eine Exception und nicht um einen anderen Fehler, was sich ohne Kenntnis der kompletten Meldung natürlich schlecht einschätzen lässt. 😉


Anmelden zum Antworten