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