Показать сообщение отдельно

  #5  
Старый 24.06.2007, 12:30
je0n
Постоянный
Регистрация: 14.05.2006
Сообщений: 334
Провел на форуме:
1543521

Репутация: 272
Отправить сообщение для je0n с помощью ICQ
По умолчанию

http://forum.web-hack.ru/index.php?showtopic=6328

Тебе еще потребуются знание http-протокола. Юзай гугл. Вкратце: сначала посылаешь GET-запрос, затем получаешь в цикле через recv получаешь инфу. Что-то вроде этого:
Код:
char buf_in[10];
int x;
char page_text[50000];    //тут будет храниться все, что получаешь

	x=recv(sock,buf_in,sizeof(buf_in)-1,0);
	while(x>0)	
	{
		buf_in[x]=0;
		lstrcat(page_text,buf_in);
//		printf(buf_in);
		x=recv(sock,buf_in,sizeof(buf_in)-1,0);
	}
Ну и еще пример функции. Я писал ее, чисто чтобы получать код страницы, а не файла. Но суть-то одна и таже. Ты и файл ей получишь.

Код:
char* GETRequest(char* server,char* page)
{
	WSADATA sock_info;
	int err=WSAStartup(MAKEWORD(2,0),&sock_info);
	if(err==SOCKET_ERROR)
	{
		printf("WSAStartup error");
		return 0;
	}
	int sock;
	struct sockaddr_in sa;
	struct hostent* h;
	char page_text[50000];
	char buf_in[10];
	char buf_out[500];
	int x;
	sa.sin_family=AF_INET;
	sa.sin_port=htons(80);
	h=gethostbyname(server);
	memcpy(&sa.sin_addr,h->h_addr_list[0],h->h_length);
	sock=socket(AF_INET,SOCK_STREAM,0);
	if(connect(sock,(sockaddr*)&sa,sizeof(sa))<0)
	{
		printf("connect() error");
		return 0;
	}
	lstrcpy(buf_out,"GET ");                  //Составляем GET-запрос
	lstrcat(buf_out,page);
	lstrcat(buf_out," HTTP/1.0\r\n");
	send(sock,buf_out,lstrlen(buf_out),0);
	lstrcpy(buf_out,"Host: izobilnik.ru\r\n");
	send(sock,buf_out,lstrlen(buf_out),0);
	lstrcpy(buf_out,"Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, */*\r\n");
	send(sock,buf_out,lstrlen(buf_out),0);
	lstrcpy(buf_out,"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)\r\n\r\n"); //заголовок User-Agent:
	send(sock,buf_out,lstrlen(buf_out),0);
	lstrcpy(page_text,"");
	x=recv(sock,buf_in,sizeof(buf_in)-1,0);
	while(x>0)
	{
		buf_in[x]=0;
		lstrcat(page_text,buf_in);
//		printf(buf_in);
		x=recv(sock,buf_in,sizeof(buf_in)-1,0);
	}
	closesocket(sock);
	return page_text;
}
пример использования:
Код:
char p[50000];
lstrcpy(file,GETRequest("izobilnik.ru","/yourfile.zip"));
по идее в p, должен быть ответ от сервера, вместе с файлом. Если файл большой, то увеличь значение в 50000

Последний раз редактировалось je0n; 24.06.2007 в 12:34..