integrato ;)
Libreria per l'invio di richieste di tipo GET e POST
HttpRequest.c/HttpRequest.h

 
Dettagli:
 
Con l'utilizzo di questa funzione è possibile fare richieste di tipo GET e POST a siti web.
E' possibile ad esempio utilizzarla per fare ricerche su google e vedere i risultati o per postare nei guestbook.

 
Codice:
 
  1. char * HttpRequest(char * host,METHOD mt,char * pag,char * param)
  2. {
  3. struct hostent* HostEnt;
  4. SOCKET Socket;
  5. struct sockaddr_in ServerInfo;
  6. int retval;
  7. char Buffer[2048];
  8. char temp[0xFFFF];
  9. char *res;
  10.  
  11. // Pulisco la struttura
  12. memset(&ServerInfo, 0, sizeof(ServerInfo));
  13.  
  14. // Risolvo l'host
  15. HostEnt = gethostbyname(host);
  16.  
  17. if (!HostEnt)
  18. return NULL;
  19.  
  20. // Creo il socket
  21. Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  22.  
  23. if (Socket == INVALID_SOCKET)
  24. return NULL;
  25.  
  26. // Imposto i parametri di connessione
  27. memcpy(&ServerInfo.sin_addr,HostEnt->h_addr, HostEnt->h_length);
  28. ServerInfo.sin_family = AF_INET;
  29. ServerInfo.sin_port = htons(80); // Porta 80
  30.  
  31. // Connessione
  32. if (connect(Socket,(struct sockaddr*) &ServerInfo,
  33. sizeof(ServerInfo)) == SOCKET_ERROR)
  34. {
  35. closesocket(Socket);
  36. return NULL;
  37. }
  38.  
  39. // Creo la stringa di richiesta GET o POST
  40. switch (mt)
  41. {
  42. case GET:
  43. sprintf(Buffer, "GET /%s?%s HTTP/1.0\r\n
  44. Accept: text/html\r\n
  45. Accept-Language: it,it-it,en-us,en;q=0.5\r\n
  46. User-Agent: CustromClient/1.0\r\n
  47. Host: %s\r\n
  48. Connection: Keep-Alive\r\n
  49. Cache-Control: no-cache\r\n\r\n",
  50. pag,param,host);
  51. break;
  52. case POST:
  53. sprintf(Buffer, "POST /%s HTTP/1.0\r\n
  54. Accept: text/html\r\n
  55. Accept-Language: it,it-it,en-us,en;q=0.5\r\n
  56. User-Agent: CustromClient/1.0\r\n
  57. Host: %s\r\n
  58. Connection: Keep-Alive\r\n
  59. Cache-Control: no-cache\r\n
  60. Content-Length: %d\r\n
  61. Content-Type: application/x-www-form-urlencoded\r\n
  62. \r\n%s\r\n\r\n",
  63. pag,host,strlen(param),param);
  64. break;
  65. default:
  66. return NULL;
  67. }
  68.  
  69. // Invio la richiesta
  70. if (send(Socket, Buffer, sizeof(Buffer),0) == SOCKET_ERROR)
  71. {
  72. closesocket(Socket);
  73. return NULL;
  74. }
  75.  
  76. // Pulisco la stringa che conterrà la riposta
  77. memset(temp,0,sizeof(temp));
  78.  
  79. // Resto in attesa per leggere la risposta del server
  80. do
  81. {
  82. retval = recv(Socket,Buffer,sizeof(Buffer),0);
  83. Buffer[retval] = '';
  84. strcat(temp,Buffer);
  85. } while (retval > 0);
  86.  
  87. // Chiudo la connessione
  88. closesocket(Socket);
  89.  
  90. // Alloco lo spazio per la risposta
  91. res = (char*)malloc((strlen(temp) + 1) * sizeof(char));
  92. strcpy(res,temp);
  93.  
  94. // La ritorno
  95. return res;
  96. }
Nota: Per un corretto funzionamento occorre inizializzare la struttura WSADATA prima della chiamata alla funzione.

 
Esempio di una pagina php per la verifica dei dati:
 
Per constatare il corretto funzionamento della libreria ho realizzato una pagina php che risponda con i parametri che risponda con i parametri che le sono stati inviati (GET o POST). La riporto di seguito:
  1. <?
  2. /* HttpRequestExample.php
  3.   Stampa a video i parametri inviati tramite GET o POST
  4.   http://www.suondmao.altervista.org
  5. */
  6. foreach ($_GET as $key => $value)
  7. echo "GET: [".$key."] => ".$value."\r\n";
  8.  
  9. foreach ($_POST as $key => $value)
  10. echo "POST: [".$key."] => ".$value."\r\n";
  11. ?>

 
Esempio di utilizzo:
 
  1. #include <stdio.h>
  2. #include <winsock.h>
  3. #include "HttpRequest.h"
  4. #pragma comment(lib, "ws2_32.lib")
  5.  
  6. int main()
  7. {
  8. WSADATA data;
  9. char *ris;
  10.  
  11. // Inizializzo le primitive sul winsock
  12. if (WSAStartup(MAKEWORD(2,0),&data))
  13. {
  14. printf("Errore WSAStartup()\n");
  15. return 1;
  16. }
  17.  
  18. /*
  19.   // Esempio richiesta GET su google per una ricerca
  20.   if ((ris = HttpRequest("www.google.it",
  21.   GET,"search",
  22.   "hl=it&q=suondmao.altervista.org")
  23.   ) == NULL)
  24.   {
  25.   printf("Errore HttpRequest() GET\n");
  26.   WSACleanup();
  27.   return 1;
  28.   }
  29.   printf("%s\n",ris);
  30.   */
  31.  
  32. // Esempio richiesta GET
  33. if ((ris = HttpRequest("www.suondmao.altervista.org",
  34. GET,
  35. "/articles/cod/codes/HttpRequest/HttpRequestExample.php",
  36. "uno=1&due=2&tre=3")
  37. ) == NULL)
  38. {
  39. printf("Errore HttpRequest() GET\n");
  40. WSACleanup();
  41. return 1;
  42. }
  43. printf("%s\n",ris);
  44.  
  45. // Esempio richiesta POST
  46. if ((ris = HttpRequest("www.suondmao.altervista.org",
  47. POST,
  48. "/articles/cod/codes/HttpRequest/HttpRequestExample.php",
  49. "quattro=4&cinque=5&sei=6")
  50. ) == NULL)
  51. {
  52. printf("Errore HttpRequest() POST\n");
  53. WSACleanup();
  54. return 1;
  55. }
  56. printf("%s\n",ris);
  57.  
  58. WSACleanup();
  59. return 0;
  60. }

 
Download:
 

Script Execution Time: 0.095408 seconds - Visite: 645979
Copyright © 2007-2017 Suondmao v0.1.5-1