Telechargement d'un fichier sur internet

[Résolu]
Signaler
Messages postés
7
Date d'inscription
lundi 15 mai 2006
Statut
Membre
Dernière intervention
16 octobre 2006
-
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
-
Salut,
Voila j'essaie de telecharger un fichier http mais je ne sais pas comment recevoir le fichier
help please.

voici le programme:
// Download d'un fichier http par Iluvatar le 26/05/2006

#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include
#include
#include
#include
#include <fcntl.h>


// #define DEBUG

//////////////////////////////////////////////////////////////////////


int envoie( int sock,char *text)
{
return( send(sock, text, strlen( text), 0));
}

int recois( int sock, char *text, int len)
{
int r;
r= recv(sock, text, len, 0);
text[r]=0;
return( r);
}

int download( char*name, char *destination)
{
int sock;
struct sockaddr_in serv_addr;
struct hostent *server;
int port=80;
int i,r;
char *p_txt;
char url[256];
int length;
char *length_txt;
char buffer[65535];
int f;

#ifdef DEBUG
printf( "creation socket\n");
#endif
if((sock=socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket");
return(1);
}

strcpy( url, name);
p_txt=strchr( url, '/');
if ( p_txt!=NULL)
{

*p_txt='\0';
// printf( "serveur%s txt:%s", buffer, p_txt+1);

if(!(server=gethostbyname( url)))
{
printf("Erreur DNS\n");
return 1;
}
}
else
{
printf( "URL malformee\n");
return( 1);
}
serv_addr.sin_family = AF_INET;
/*
serv_addr.sin_addr[0] = server->h_addr[0];
serv_addr.sin_addr[1] = server->h_addr[1];
serv_addr.sin_addr[2] = server->h_addr[2];
serv_addr.sin_addr[3] = server->h_addr[3];
*/

serv_addr.sin_addr = *(struct in_addr*)server->h_addr;
serv_addr.sin_port = htons(port);

// printf("connect\n");
if (connect(sock,(struct sockaddr*) &serv_addr, sizeof(serv_addr)) < 0)
{
printf("erreur connect");
return 1;
}


// get du fichier
#ifdef DEBUG
printf( "GET");
#endif
strcpy( buffer, "GET /");
strcat( buffer, p_txt+1);
strcat( buffer, " HTTP/1.1\r\n");
strcat( buffer, "User-Agent: Mozilla/5.0\r\n");
strcat( buffer, "Accept: text/html, image/jpeg, image/png, text/*, image/*, */*\r\n");
strcat( buffer, "Accept-Encoding: x-gzip, x-deflate, gzip, deflate\r\n");
strcat( buffer, "Accept-Charset: utf-8, utf-8;q=0.5, *;q=0.5\r\n");
strcat( buffer, "Host: ");
strcat( buffer, url);
strcat( buffer, "\r\nConnection: Keep-Alive");
strcat( buffer, "\r\n\r\n");
#ifdef DEBUG
printf( "buffer:%s\n", buffer);
#endif
envoie( sock, buffer);

recois( sock, buffer, sizeof( buffer));
if ( strstr( buffer, "200 OK")!=NULL)
{
length_txt=strstr( buffer,"Content-Length:"); // cherche le debut de la phrase 'Content-lenght'

*strstr( length_txt, "\r\n")='\0'; // met 0 en fin de longueur du fichier

length=atoi( length_txt+strlen( "Content-Length:"));
#ifdef DEBUG
printf( "fichier %s de longueur:%i\n", fichier, length);
#endif
f=open( destination, O_CREAT | O_WRONLY);
for( i=1; i</fcntl.h></string.h></stdlib.h></stdio.h></netdb.h>

4 réponses

Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
Messages postés
56
Date d'inscription
dimanche 13 novembre 2005
Statut
Membre
Dernière intervention
11 juillet 2006

manque des \n (je crois mdr)
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
3
Salut :)

Regardes du côté de l' API URLMON c'est vraiment le plus simple sur Win32. 
Messages postés
233
Date d'inscription
jeudi 4 juillet 2002
Statut
Membre
Dernière intervention
5 juillet 2008

il y a une chiée d'exemple avec des méthodes différentes sur le site, il suffit de chercher un peu ...

http://www.cppfrance.com/recherche.aspx?r=Telechargement&tr=source