HTTP Version differenzieren



  • Hi ich möchte gerne eine Datei via HTTP Protokol herunterladen mein Programm arbeitet solange fehlerfrei solange der Server HTTP 1.0 akzeptiert tut er das nicht stürzt es leider ab

    Hier erstmal ein Codeausschnitt :

    // HTTP-GET-Befehl erzeugen
        sprintf (command, "GET /%s HTTP/1.0\r\nHost:%s\r\n\r\n",file_lc, host_lc);
    
        // Befehl senden
        bytes_sent = send (sock, command, strlen (command), 0);
        if (bytes_sent == -1) {
            u_respond(u,"send()");
            return;
        }
    
        // Antwort des Servers empfangen und auswerten
        G_Out = fopen("OUT.DAT","w");
        G_headend = 0;
        G_zaehl = 0;
        // Ende des Kopfes / Anfangsposition des Files wird gesucht - Schluesselcharakter ( 13,10,13,10 )
        while ((bytes_recv = recv (sock, buf, sizeof(buf), 0)) > 0) {
            if(!G_headend){
                for(G_zaehl=0; G_zaehl<bytes_recv; G_zaehl++){
                    switch (buf[G_zaehl]){
                        case 13:
                            if(G_hit == 0) G_hit++;
                            if(G_hit == 2) G_hit++;
                            break;
                        case 10:
                            if(G_hit == 1) G_hit++;
                            if(G_hit == 3) G_hit++;
                            break;
                        default:
                        if(G_hit != 4) G_hit = 0;
                    }
                    if(G_hit == 4){
                        G_headend = 1;        //Kopfende gefunden
                        break;
                    }
                }
                if(G_hit == 4){
                    G_zaehl++;
                    while(G_zaehl<bytes_recv){
                        fwrite(buf[G_zaehl], 1, 1, G_Out);
                    }
                    G_hit++;
                }
            }
            else{    //File wird geschrieben
                fwrite(buf, 1, bytes_recv, G_Out);
            }
        }
        if (bytes_recv == -1) {
            fclose(G_Out);
            u_respond(u, "recv()");
            remove("OUT.DAT");
            return;
        }
        fclose(G_Out);
    

    ich habe versucht http://213.203.218.122:80/sourceforge/sevenzip/7z420.exe herunterzuladen aber das Programm stürzt ab stelle ich nun diese zeile wie folgt um :

    aus

    sprintf (command, "GET /%s HTTP/1.0\r\nHost:%s\r\n\r\n",file_lc, host_lc);
    

    wird

    sprintf (command, "GET /%s HTTP/2.0\r\nHost:%s\r\n\r\n",file_lc, host_lc);
    

    funktioniert es reibungslos.

    Ist HTTP nicht abwärtskompatibel ? Wie kann ich erfahren welche version der server unterstützt ? Oder zumindest fals ich die falsche Version anfordere den Fehler abfangen so das das Programm nicht abstürzt.

    TIA Copper Hobbit



  • http 1.0 will nur eine zeile im query
    nimm http 1.1, wenn du eine zweite "host"zeile machen willst.
    wusste nicht, dass es http 2.0 schon gibt oder dass man es benutzen soll


Anmelden zum Antworten