URL prüfen



  • danke...

    also, ich versuche jetzt Adressen in Memo1 zu prüfen und in Memo2 soll der entsprechende ResponseCode ausgegeben werden...also 200, 404, 403 usw...
    aber irgendwie klappts das so noch nicht, in BCB wird jedesmal eine Exception ausgelöst, trotz try catch....immer ein Fehler des Typs EIdProtocolReplyError

    for(i=0;i<lcount;i++)
            {
            if(IdHTTP1->Connected()) IdHTTP1->Disconnect();
            try
                    {
                    IdHTTP1->Get(Memo1->Lines->Strings[i]);
                    Memo2->Lines->Strings[i]=IdHTTP1->ResponseCode;
                    }
            catch(EIdProtocolReplyError &e)
                    {
                    Memo2->Lines->Strings[i]=IdHTTP1->ResponseCode;
                    }
            }
    

    kann mir da jemand helfen?



  • Vielleicht doch mal die von mir empfohlene Komponente benutzen?

    Läuft ohne Fehler

    http://www.marquardtnet.info/cecke/programme.4/alive.42/42_alive.html



  • Wie sieht der 'Eintrag in TMemo aus für eine URL?



  • solange du dein programm aus der ide heraus startest, bekommst du immer alle exceptions angezeigt, nur wenn du es normal startest, werden die exceptions in einem try/catch-block abgefangen ohne unterbrechung.



  • ja, das stimmt, wenn ich das Programm so starte kommen diese Exceptions nicht, aber ein Socket Fehler 11004 kommt...weiß jemand warum?



  • und einen Fehler "302 Found" bekomme ich auch, aber warum ist das überhaupt ein Fehler...



  • Wer sagt, dass 302 ein Fehler ist?? Fehler sind ab 500. Ein 11004 Error bedeutet, dass der Domain Name nicht in eine IP Adresse aufgelöst werden konnte (Grund: es wurde kein DNS Eintrag gefunden)

    Statuscode Beschreibung
    100 Continue
    101 Switching Protocols
    200 O.K.
    201 Created
    202 Accepted
    203 Non-Authoritative Information
    204 No Content
    205 Reset Content
    206 Partial Content
    300 Multiple Choices
    301 Moved Permanently
    302 Moved Temporarily
    303 See Other
    304 Not Modified
    305 Use Proxy
    306 Reserviert
    307 Temporary Redirect
    400 Bad Request
    401 Unauthorized
    402 Payment Requiered
    403 Forbidden
    404 Not Found
    405 Method not allowed
    406 Not Acceptable
    407 Proxy Authentication Required
    408 Request Timeout
    409 Conflict
    410 Gone
    411 Length Requiered
    412 Precondition Failed
    413 Request Entity Too Large
    414 Request-URI-Too Large
    415 Unsupported Media Type
    416 Requested Range Not Satisfiable
    417 Exception Failed
    500 Internal Server Error
    501 Not Implemented
    503 Service Unavailable
    504 Gateway Timeout
    505 HTTP Version Not Supported



  • naja, bei 302 tritt catch in kraft...



  • hmmm, warum funktioniert meine schleife so nicht:

    for(i=0;i<20;i++)
            {
            Memo1->Lines->Strings[i]="zeile";
            }
    

    dabei werden nur 2 anstatt 20 zeilen geschrieben, aber woran hängts?



  • Hallo

    - was hast das noch mit diesem Thread zu tun?
    - wiviele Zeilen sind denn vorher in dem Memo? Wenn du einfach 20 neue Zeilen willst, must du ->Lines->Add("Zeile") machen

    bis bald
    akari



  • sorry...hat nur indirekt damit zu tun...
    aber wenn ich etwas in eine bestimmte zeile einfügen will ohne es einfach anzuhängen, wie geht das dann?
    ich dachte mit Memo1->Lines->Strings[x]="zeile x"; geht das....



  • Wenn man auf DIE SCHON VORHANDENEN ZEILEN zugreifen will sollte das immer über i<Memo1->Lines->Count erfolgen.

    Zu 302:

    Dann solltest du im Catchzweig auf die Nummer prüfen.



  • Hallo

    Memo1->Lines->Strings[x]="zeile x";
    

    ersetzt die i-te Zeile im Memo durch "zeile x". Ist die Zeile nicht vorhanden, kommt eine Zugriffsverletzung.

    Memo1->Lines->Strings[x]=Memo1->Lines->Strings[x]+"zeile x";
    

    fügt "zeile x" an die i-te Zeile an. Zugriffsverletzung...

    Dann gibt es noch Lines->Insert() und Lines->Add().

    Was willst du also?

    bis bald
    akari



  • danke nochmals...
    also, so sieht die Stelle aus:

    for(i=0;i<lcount;i++)
            {
            if(IdHTTP1->Connected()) IdHTTP1->Disconnect();
            try
                    {
                    IdHTTP1->Get(Memo1->Lines->Strings[i]);
                    Memo2->Lines->Strings[i]=IdHTTP1->ResponseCode;
                    ShowMessage(IdHTTP1->ResponseCode);
                    }
            catch(EIdProtocolReplyError &e)
                    {
                    Memo2->Lines->Strings[i]=IdHTTP1->ResponseCode;
                    }
            }
    }
    

    Memo2 ist 20 Zeilen groß, im try Block wird bei der ersten Ausführung alles gemacht, ab der zweiten Ausführung (für i=1) wird Memo2->Lines->Strings...nicht mehr ausgeführt, bzw es erscheint nichts in dieser Zeile, ShowMessage wird aber korrekt ausgeführt...



  • Warum ist Memo2 20 Zeilen groß???

    Da du ja immer in das Memo2 schreibst sollte folgendes funktionieren:

    for(i=0;i<lcount;i++)
            {
            if(IdHTTP1->Connected()) IdHTTP1->Disconnect();
            try
                    {
                    IdHTTP1->Get(Memo1->Lines->Strings[i]);
                    Memo2->Lines->Add(IdHTTP1->ResponseCode);
                    ShowMessage(IdHTTP1->ResponseCode);
                    }
            catch(EIdProtocolReplyError &e)
                    {
                    Memo2->Lines->Add(IdHTTP1->ResponseCode);
                    }
            }
    }
    

    Des Weiteren ist m.E. das

    if(IdHTTP1->Connected()) IdHTTP1->Disconnect();
    

    verbinden falsch. Damit wird eine Verbindung zu einem Server hergestellt. Das hat die Klasse geerbt, aber das willst du ja so direkt nicht (jedenfalls keine "Dauerverbindung"). Die Klasse sollte intern bei einem Get selbst die Verbindung herstellen und wieder beenden. Das sollte nur mit dem Get funktionieren. Das funktioniert jedenfalls bei TNMHTTP so. Hier könnte es analog so sein.



  • Auc ist etwas an der Logik nicht so ganz ok

    Beim ersten Lauf wird geprüft, ob HTTP-Connect ist.Wenn ja wird die Connection beendet.

    Dann wird der Response abgesetzt.

    Auf eine nicht bestehende Verbindung??
    Wozu dann die Prüfung bei jedem Durchlauf?
    Wann wird die Verbindung erstellt?


Anmelden zum Antworten