Telechargement d'un fichier sur internet

Résolu
fredleconte Messages postés 7 Date d'inscription lundi 15 mai 2006 Statut Membre Dernière intervention 16 octobre 2006 - 1 juin 2006 à 19:53
ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 - 2 juin 2006 à 18:19
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

ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
2 juin 2006 à 18:19
3
ben92600 Messages postés 56 Date d'inscription dimanche 13 novembre 2005 Statut Membre Dernière intervention 11 juillet 2006
1 juin 2006 à 20:09
manque des \n (je crois mdr)
0
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
2 juin 2006 à 09:20
Salut :)

Regardes du côté de l' API URLMON c'est vraiment le plus simple sur Win32. 
0
24Karas Messages postés 233 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 5 juillet 2008
2 juin 2006 à 09:25
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
0
Rejoignez-nous