Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3146 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  pb avec mon code!!!!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pb avec mon code!!!!

n°163069
roupougnou​f
Posté le 21-06-2002 à 07:03:36  profilanswer
 

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.

mood
Publicité
Posté le 21-06-2002 à 07:03:36  profilanswer
 

n°163075
El_gringo
Posté le 21-06-2002 à 08:51:48  profilanswer
 

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 !

n°163119
antp
Super Administrateur
Champion des excuses bidons
Posté le 21-06-2002 à 09:43:00  profilanswer
 

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

Aller à :
  FORUM HardWare.fr
  Programmation
  C++

  pb avec mon code!!!!

 

Sujets relatifs
[SGBD] Sybase, récuperer le code d'une sp ...[C++] Encapsuler du code Win32 dans un dialog MFC ?
[JAVASCRIPT] comme mettre un code html en javascript ?[Java] obtenir le code ASCII d'un caractère
Recuperer le code source ?mise en page du code java
Passer ce code C en pascal...code pour ne pas distinguer maj et minuscule
code pour ne pas faire la différence entre maj et min ?Insertion de code dans un champ texte en javascript
Plus de sujets relatifs à : pb avec mon code!!!!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR