Requetes HTML

Requetes HTML - C - Programmation

Marsh Posté le 16-02-2006 à 02:17:29    

Bonjour à tous,  
 
je fais un programme en C  qui gere la mise à jour d'une adresse dns en fonction d'un ping et là je bloque pour envoyer une requete HTML sans ouvrir de fenetre ieplorer ou mozilla.
 
J'ai cette info là a envoyer

Code :
  1. "http://"NomUser":"Pass"@members.dyndns.org/nic/update?system=dyndns&hostname="Adresse dyndns"&myip="IP"&wildcard=OFF&mx=&backmx=NO&offline=NO"


 
 
Si kkun a la solution je lui en serait trés reconnaissant ;)

Reply

Marsh Posté le 16-02-2006 à 02:17:29   

Reply

Marsh Posté le 16-02-2006 à 09:13:53    

Il s'agit plutôt d'une requête HTTP (pas grand chose à voir avec HTML)
 
Le principe général est:
 

  • 1. ouvrir une socket vers le serveur qui t'intéresse (members.dyndns.org, port 80). Il existe des tonnes de docs sur le sujet.

Par exemple : (ce code provient du poly de cours de programmation système de l'ENSTA)

Code :
  1. int socket_client ( char *serveur , unsigned short port )
  2. {
  3.    int                  client_socket ;
  4.    struct hostent       *hostent ;
  5.    struct sockaddr_in   serveur_sockaddr_in ;
  6.    client_socket = socket ( PF_INET , SOCK_STREAM , 0 ) ;
  7.    if ( client_socket == -1 )
  8.    {
  9.       perror ( "socket" ) ;
  10.       exit ( EXIT_FAILURE ) ;
  11.    }
  12.    if ( inet_addr ( serveur ) == INADDR_NONE )   /* nom */
  13.    {
  14.       hostent = gethostbyname ( serveur ) ;
  15.       if ( hostent == NULL )
  16.       {
  17.          perror ( "gethostbyname" ) ;
  18.          exit ( EXIT_FAILURE ) ;
  19.       }
  20.    }
  21.    else   /* adresse IP */
  22.    {
  23.       unsigned long addr = inet_addr ( serveur ) ;
  24.       hostent = gethostbyaddr ( ( char * ) &addr , sizeof ( addr ) ,
  25.                                 AF_INET ) ;
  26.       if ( hostent == NULL )
  27.       {
  28.          perror ( "gethostbyaddr" ) ;
  29.          exit ( EXIT_FAILURE ) ;
  30.       }
  31.    }
  32.    memset ( &serveur_sockaddr_in , 0 , sizeof ( serveur_sockaddr_in ) ) ;
  33.    serveur_sockaddr_in.sin_family      = AF_INET ;
  34.    serveur_sockaddr_in.sin_port        = htons ( port ) ;
  35.    memcpy ( &serveur_sockaddr_in.sin_addr.s_addr , hostent->h_addr_list[0] ,
  36.             hostent->h_length) ;
  37.    printf ( ">>> Connexion vers le port %d de %s [%s]\n" ,
  38.             port , hostent->h_name ,
  39.             inet_ntoa ( serveur_sockaddr_in.sin_addr ) ) ;
  40.    if ( connect ( client_socket , ( struct sockaddr * ) &serveur_sockaddr_in ,
  41.                                   sizeof ( serveur_sockaddr_in ) ) == -1 )
  42.    {
  43.       perror ( "connect" ) ;
  44.       exit ( EXIT_FAILURE ) ;
  45.    }
  46.    return client_socket ;
  47. }


 
<edit> j'ai oublié de préciser que tout ceci est spécifique pour Linux (ou plutôt POSIX). Il faut bien sûr que tu adaptes en utilisant les fonctions spécifiques de ton OS </edit>
 

  • 2. visiblement, tu as une authentification à gérer, et ça, je ne sais pas du tout comment ça marche


  • 3. tu envoies la requête http dans la socket de connexion :
Code :
  1. int c_socket = client_socket( "members.dyndns.org", 80 );
  2. fprintf( c_socket, "GET /nic/update?system=dyndns&hostname=%s&myip=%s&wildcard=OFF&mx=&backmx=NO&offline=NO HTTP/1.0\n\n", adresse_dyn_dns, ip );


Message édité par franceso le 16-02-2006 à 10:31:10
Reply

Marsh Posté le 16-02-2006 à 11:32:44    

J'ai fouiner un peu sur le net pour trouver des info et j'ai trouver quelques chose que je n'arrive pas trop a exploiter, je vous met les infos et si quelqu'un peu m'éclairer à ce sujet sa serai super ;)


Représente le contenu, non analysé, du message de requête HTTP.
 
__property AnsiString Content = {read=GetStringVariable, index=25};
 
Description
 
Utilisez la propriété Content pour accéder au contenu d'un message de requête HTTP qui envoie des informations au serveur. La valeur de la propriété Content dépend de celle de Method pour la requête HTTP. Si Method a la valeur POST, Content  contient la chaîne non analysée spécifiant les valeurs à expédier avec leurs champs associés. Si Method a la valeur PUT, Content spécifie la valeur qui doit remplacer l'URL spécifiée par la propriété URL.


 
 
Merci


Message édité par Cuty74 le 16-02-2006 à 11:33:47
Reply

Marsh Posté le 16-02-2006 à 11:51:55    

A mons avis c'est du .NET, mais je pense que ca va avoir du mal a rentrer dans ton programme C facilement.
Pour les requete Http, une lib facile a utiliser c'est libcurl. Ca tourne sous windows / unix /linux.
Enfin je me repete mais si tu veux pas trop te compliquer la vie avec les sockets etc ...

Reply

Marsh Posté le 16-02-2006 à 11:55:19    

Ouép jvais me rediriger vers les sockets, jvais étudier un peu le sujet et jvais voir si j'arrive a expliter ce que ma dis franceso.
 
En tout cas je vous remercie pour votre aide ;)

Reply

Sujets relatifs:

Leave a Replay

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