"strerror" für HTTP-Statuscodes



  • Hallo,
    ich muss für einen RSS-reader HTTP-Statuscodes auswerten. Gibts es eine Möglichkeit (d.h. eine Funktion) die einen Statuscode in einen Fehlerstring umwandelt?



  • Hallo,

    meistens nicht! Es gibt aber so ziemlich immer eine Dokumentation der Statuscodes. Dieser Dokumentation kannst du den Code und den dazugehörigen "echten" Fehler entnehmen, dass ganze zum Beispiel in einem Array vereinen und dir die entsprechenden Codes rausziehen wenn du sie benötigst.

    Nun sind deine Aussagen bezüglich angewandter Sprache u.Ä. nicht sonderlich vielfältig, weswegen es schwer wird weitere Hilfestellung zu geben...

    VlG



  • Sprache ist C (auf Linux).
    Das entsprechende RFC habe ich schon gelesen (jedenfalls die relevanten Teile) Ich wollte nur wissen ob ich das Ganze selber schreiben muss oder obs da was Vorgefertigtes gibt



  • Wenn ich mich richtig erinnere wird doch sogar eine (kurze) Fehlerbeschreibung im HTTP Header zurückgeliefert:
    HTTP/1.0 404 Not Found
    HTTP/1.0 401 Not Authorized
    Wenn du deutsche/längere Meldungen haben willst musst du die natürlich selber eingeben, vielleicht findest du im Internet schon ne Tabelle.



  • kopf -> Tisch du hast vollkommen Recht
    Naja ich hab mir jetzt sowas geschrieben, werds dann irgendwann ändern

    char *http_status_str(unsigned short status)
    {
            /* currently only some codes implemented */
            switch(status){
                    case 200: return "OK";
                    case 400: return "Bad request";
                    case 401: return "Unauthorized";
                    case 403: return "Forbidden";
                    case 404: return "Not found";
                    case 408: return "Request Time-Out";
                    case 500: return "Internal Server Error";
                    }
            return NULL;
    }
    

  • Mod

    char *http_status_str(unsigned short status)
    {
            /* currently only some codes implemented */
            switch(status){
                    case 200: return "OK";
                    case 400: return "Bad request";
                    case 401: return "Unauthorized";
                    case 403: return "Forbidden";
                    case 404: return "Not found";
                    case 408: return "Request Time-Out";
                    case 500: return "Internal Server Error";
                    }
            if(status >=400)
               return "Unknown Error";
            else
               return "Some kind of OK";
    }
    

    Viel besser.
    Das return NULL ist ein richtiges Problem, da man so immer den rückgabewert prüfen muss und dann erst recht eine default meldung ausgeben muss. Viel besser ist es einfach einen default error zurückzuliefern. reduziert die Code Komplexität enorm.

    bzw. kannst du auch nach Status-Typen einteilen. 2xx ist immer ein OK, 3xx ist immer ein redirect, 4xx ist immer ein error von der client seite, 5xx immer einer von der Server Seite.



  • Ich habe die Funktion wieder entfernt, der Server ist ja so freundlich und schickt den String mit
    Ich hab jetzt sowas draus gemacht

    if(sscanf(line,"HTTP/%* %3hd",&status)){
         /* we got the status line */
         if((status/100)>3){
              /* print the part after HTTP/x.x */
              fprintf(stderr,"error:%s",strchr(line,' '));
              return NULL;
         }
         /* ... */
    

    line ist ein char* auf eine Zeile der Serverantwort (mit strtok(line,'\n') zerteilt)


Log in to reply