URL prüfen



  • 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