Get it on Google Play

Petició POST en C

05-06-2007
 

Aquí un exemple de com fer una petició POST en C (Es una modificació d’una funció que vaig trobar per Internet):

#include <stdarg.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/socket.h>
#include <resolv.h>
#include <errno.h>

#define MAXBUF 1024

int readPagina(char *ip, char *pagina, char *post, char *ret){
       int sockfd, bytes_read;
       struct sockaddr_in dest;
       char buffer[MAXBUF];
       char temp[50]; // variable temporal

       /*—Make sure we have the right number of parameters—*/
       if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) {printf(“Socket”); return;}

       /*—Initialize server address/port struct—*/
       bzero(&dest, sizeof(dest));
       dest.sin_family = AF_INET;
       dest.sin_port = htons(80); /*default HTTP Server port */
       if ( inet_addr(ip, &dest.sin_addr.s_addr) == 0 ) {printf(ip); return;}

       /*—Connect to server—*/
       if ( connect(sockfd, (struct sockaddr*)&dest, sizeof(dest)) != 0 ) {printf(“Connect”); return;}

       strcpy( buffer,”” );
       sprintf(temp, “POST %s HTTP/1.0\n”, pagina); strcat(buffer,temp);
       sprintf(temp, “Content-Type: application/x-www-form-urlencoded\n”); strcat(buffer,temp);
       sprintf(temp, “Content-Length: %d\n\n”, strlen(post) ); strcat(buffer,temp);
       sprintf(temp, “%s\n”, post); strcat(buffer,temp);

       send(sockfd, buffer, strlen(buffer), 0);

       /*—While there’s data, read and print it—*/
       strcpy( ret,”” );
       do {
              bzero(buffer, sizeof(buffer));
              bytes_read = recv(sockfd, buffer, sizeof(buffer), 0);
              if ( bytes_read > 0 )
              sprintf(ret,”%s%s”, ret, buffer);
       } while ( bytes_read > 0 );

       /*—Clean up—*/
       close(sockfd);
       return 0;
      }

Leave a Reply

© Albert Coronado Calzada