c°h°
17.06.2005, 15:42
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 (http://213.203.218.122/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
//Added Code Tags (evilissimo)
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 (http://213.203.218.122/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
//Added Code Tags (evilissimo)