1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| char * GetHtml(char* host,char *page)
{
char *ip;
char *request;
int sock;
struct sockaddr_in *server;
int res;
char buffer[BUFSIZ+1];
ip = get_ip(host);
sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sock<0)
{
perror("Can't create TCP socket");
return NULL;
}
server = (struct sockaddr_in*) malloc(sizeof(struct sockaddr_in*));
server->sin_family = AF_INET;
res = inet_pton(AF_INET,ip,(void*)(&(server->sin_addr.s_addr)));
if(res <0)
{
perror("can't set server->sin_addr.s_addr");
return NULL;
}
else if(res == 0)
{
printf("\"%s\" is not a valid IP\n",ip);
return NULL;
}
server->sin_port = htons(PORT);
printf("Connection to %s (%s) ",host,ip);
res = connect(sock,(struct sockaddr *)server,sizeof(struct sockaddr));
if (res < 0)
{
perror("\t\t\t[failed]\n");
return NULL;
}
puts("\t\t\t [OK]");
request = build_get_query(host,page);
printf("Quering:\n%s",request);
int sent = 0;
while(sent<strlen(request))
{
res = send(sock,request+sent,strlen(request)-sent,0);
if(res == -1)
{
puts("\t\t\t [failed]");
perror("Can't send query");
return NULL;
}
sent+=res;
}
memset(buffer,0,sizeof(buffer));
char *HtmlContent = (char *)malloc(sizeof(char)+1);
strcpy(HtmlContent,"");
while((res = recv(sock,buffer,BUFSIZ,0))>0)
{
if(res>0) //if superflux mais je suis un peu parano
{
HtmlContent = (char *)realloc(HtmlContent,sizeof(char*)+(strlen(HtmlContent)+res+1));
strcat(HtmlContent,buffer);
}
memset(buffer,0,res);
}
if(res<0)
{
perror("Error reveiving data");
}
free(ip);
free(server);
close(sock);
int a = strstr(HtmlContent,"\r\n\r\n")-HtmlContent;
HtmlContent+=a;
return HtmlContent;
} |
Partager