pb avec mon code!!!!

pb avec mon code!!!! - C++ - Programmation

Marsh Posté le 21-06-2002 à 07:03:36    

je ne comprends pas j'ai un pb aevc avec la ligne suivante:  
if ( (strstr(BufferRead,"200 OK" ))==NULL )
 
qd je mets u e valeur supérieure à 200 je bogue, voici le source en entier ça pet être utile:
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
 
#ifndef FALSE
#define FALSE -1
#endif
 
#ifndef TRUE
 #define TRUE 0
#endif
#define MaxBuffer 8192
 
/********************************/
/***** Variables globales *******/
/********************************/
 
unsigned char *BufferRead=NULL;
unsigned char *BufferWrite=NULL;
int sockdest=NULL;
FILE *fp=NULL;
 
/********************************/
/** Prototypes des Fonctions ****/
/********************************/
 
void quit(void);
void usage(void);
int parse_url (char *url,char *host,char *urlfichier,char *fichier);
 
 
/* On quitte proprement */
void quit(void)
{
 if(BufferRead) free(BufferRead);
 if(BufferWrite) free(BufferWrite);
 if(sockdest) close( (long)(sockdest) );
 if(fp) fclose(fp);
 exit(0);
}
 
 
void usage(void)
{
 printf("HttpGet v0.5 (03/04/2001) créé par Titan pour les serveurs de Mohic ;-)\n" );
 printf("Utilisation: HttpGet <URL complète> [<Nom du fichier a sauvegarder>]\n" );
 printf("Exemple: HttpGet http://packetstorm.securify.com/UN [...] BETA22.tgz /tmp/nmap-2.54BETA22.tgz\n" );
 exit(0);
}
 
 
int parse_url (char *url,char *host,char *urlfichier,char *fichier)
{
  char *ptr;
  char target[255];
   
  strncpy((char *)target,url,7);
  if ( (ptr=strstr(target,"http://" ))==NULL )
  {
   printf("URL invalide, l'URL doit commencer par http:// \n" );
   return FALSE;
  }
   
  if ( (ptr=strchr(url+7,'/';))==NULL )
  {
   printf("URL invalide !! \n" );
   return FALSE;
  }
  strncpy(urlfichier,ptr,255); /* On récupère le fichier avec le chemin de l'URL, à l'origine strncpy(urlfichier,ptr,199) */    
  strncpy((char *)target,url,255);/*à l'origine strncpy((char *)target,url,254);*/
  ptr=strtok(&target[7],"/" );  
  strncpy(host,ptr,255); /* On récupère l'hôte *, à l'origine strncpy(host,ptr,199);/  
   
  if ( (ptr=strrchr(url,'/';))==NULL ) /* On récupère un pointeur sur le dernier caractère / pour le nom du fichier */
  {
   printf("URL invalide !! \n" );
   return FALSE;
  }
  strncpy(fichier,ptr+1,255); /* On récupère le fichier idem à l'origine j'avais strncpy(fichier,ptr+1,255); */
  return TRUE;
}
 
 
int main(int argc,char **argv)
{        
    int port=80;
    struct sockaddr_in csin;
    struct hostent *svr;
    long result;
    int nbrecar;
    size_t total;
    unsigned char chemin[255]; /*l'origine à [200]*/
    unsigned char fichier[255];/*l'origine à [200]*/
    unsigned char host[255];/*l'origine à [200]*/
    char *fich;
    char *ptr;
     
    if (argc<2 || argc>3) usage();
     
    if ( (parse_url(argv[1], (char *)host,(char *)chemin,(char *)fichier))==FALSE )
    {  
     quit();
    }
     
    if(!(svr =gethostbyname(host)))
      svr = gethostbyaddr(host, 15, AF_INET);
    if (!(svr))
     {
      printf("Hôte %s introuvable\n",host);
      quit();
     }
 
    if (argc>2)  
    {
     fich=argv[2];
    }else fich=(char *)fichier;
         
    if (BufferRead==NULL)
    {
     if ( (BufferRead=malloc(MaxBuffer+1))==NULL )
     {
      perror("malloc() Erreur" );
      quit();
     }
    }  
     
    if ( (BufferWrite=malloc(512))==NULL )
    {
      perror("malloc() Erreur" );
      quit();
    }
     
    sockdest = socket(AF_INET, SOCK_STREAM, 0);
 
     if (sockdest < 0)
      {
         printf("Impossible d'ouvrir une Socket !!\n" );
         printf("[ERREUR] Problème de Socket [ERREUR]\n" );
         quit();        
      }
 
      memcpy((caddr_t)&csin.sin_addr.s_addr, svr->h_addr, svr->h_length);
      csin.sin_family = AF_INET;
      csin.sin_port = htons(port);
      result=connect(sockdest, (struct sockaddr *)&csin, sizeof(struct sockaddr_in));
        if (result != 0)  
        {  
         perror("Connect() Erreur" );
   quit();
        }
 
        sprintf(BufferWrite,"GET %s",chemin);
        strcat(BufferWrite, " HTTP/1.0\n\n" );
        write(sockdest, BufferWrite, strlen(BufferWrite));
         
        fp=fopen(fich,"wb" );
     if (fp==NULL)
     {
     printf("Impossible de créé le fichier %s\n",fich);
     quit();
     }
 
        total=0;
         
        nbrecar=read(sockdest,BufferRead,MaxBuffer);
        if ( (strstr(BufferRead,"200 OK" ))==NULL )
        {
         printf("Impossible de télécharger le fichier\n" );
         quit();
        }
         
        printf("Réception du fichier %s en cours !!\n",fich);
         
                 
        /* ptr=strstr(BufferRead,"Content-Type:" ); */
        ptr=strstr(BufferRead,"\r\n\r\n" );
        if (ptr)
        {
         total=nbrecar-(ptr+4-BufferRead);
         nbrecar=nbrecar-(ptr+4-BufferRead);
         nbrecar=fwrite(ptr+4,1,total,fp);
        }
 
        /* Réception du fichier */
        while(1)
        {
         nbrecar=read(sockdest,BufferRead,MaxBuffer);
         BufferRead[nbrecar]=0;
         if (nbrecar==-1)
         {
          perror("read() Erreur" );
    quit();
         }
         /* printf (">%s\n",BufferRead);
            fputs(BufferRead,fp);
         */    
         nbrecar=fwrite(BufferRead,1,nbrecar,fp);
         total+=nbrecar;
 
         /*
         {
          printf("Echec sauvegarde dans le fichier\n" );
    quit();
         }
         */
         printf("KOctets reçus: %ld\r",total/1024);
         if(nbrecar<=0) break;
        }
        printf("%ld Octets(%ld KOctets) reçus\n",total,total/1024);
        fclose(fp);
        fp=NULL;
 quit();
 
}
 
j'ai mis en commentaire les valeurs que j'avais à l'origine et que j'ai ensuite modifié, car je pensais qu'il y aurait des octets qui ne seraient pas lus
merci de votre aide.

Reply

Marsh Posté le 21-06-2002 à 07:03:36   

Reply

Marsh Posté le 21-06-2002 à 08:51:48    

J'aime pas ceux qui balancent tout leur code comme ça. réfléchis au pb, et pose nue question plus précise. g pas envie de lire tt ton code !

Reply

Marsh Posté le 21-06-2002 à 09:43:00    

Moi j'aime pas ceux qui font plusieurs topics au lieu de modifier celui qui foire, ou à la limite le supprimer
http://forum.hardware.fr/forum2.php3?post=21703&cat=10


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed