char * HttpRequest(char * host,METHOD mt,char * pag,char * param) { struct hostent* HostEnt; SOCKET Socket; struct sockaddr_in ServerInfo; int retval; char Buffer[2048]; char temp[0xFFFF]; char *res; // Pulisco la struttura memset(&ServerInfo, 0, sizeof(ServerInfo)); // Risolvo l'host HostEnt = gethostbyname(host); if (!HostEnt) return NULL; // Creo il socket Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (Socket == INVALID_SOCKET) return NULL; // Imposto i parametri di connessione memcpy(&ServerInfo.sin_addr,HostEnt->h_addr, HostEnt->h_length); ServerInfo.sin_family = AF_INET; ServerInfo.sin_port = htons(80); // Porta 80 // Connessione if (connect(Socket,(struct sockaddr*) &ServerInfo, sizeof(ServerInfo)) == SOCKET_ERROR) { closesocket(Socket); return NULL; } // Creo la stringa di richiesta GET o POST switch (mt) { case GET: sprintf(Buffer, "GET /%s?%s HTTP/1.0\r\n Accept: text/html\r\n Accept-Language: it,it-it,en-us,en;q=0.5\r\n User-Agent: CustromClient/1.0\r\n Host: %s\r\n Connection: Keep-Alive\r\n Cache-Control: no-cache\r\n\r\n", pag,param,host); break; case POST: sprintf(Buffer, "POST /%s HTTP/1.0\r\n Accept: text/html\r\n Accept-Language: it,it-it,en-us,en;q=0.5\r\n User-Agent: CustromClient/1.0\r\n Host: %s\r\n Connection: Keep-Alive\r\n Cache-Control: no-cache\r\n Content-Length: %d\r\n Content-Type: application/x-www-form-urlencoded\r\n \r\n%s\r\n\r\n", pag,host,strlen(param),param); break; default: return NULL; } // Invio la richiesta if (send(Socket, Buffer, sizeof(Buffer),0) == SOCKET_ERROR) { closesocket(Socket); return NULL; } // Pulisco la stringa che conterrà la riposta memset(temp,0,sizeof(temp)); // Resto in attesa per leggere la risposta del server do { retval = recv(Socket,Buffer,sizeof(Buffer),0); Buffer[retval] = ' '; strcat(temp,Buffer); } while (retval > 0); // Chiudo la connessione closesocket(Socket); // Alloco lo spazio per la risposta res = (char*)malloc((strlen(temp) + 1) * sizeof(char)); strcpy(res,temp); // La ritorno return res; }
|