Писал информер определенной страницы.
| Код |
#define request "GET schedule/1/0/1080/1080.htm HTTP/1.1\ r\nAccept: */\r\nAccept-Language: ru \r\nAccept-Encoding: deflate \r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.2) \r\nHost: www.ifmo.ru \r\nConnection: Keep-Alive\r\n\r\n" //" // HTML запрос. #define MAX_PACKET_SIZE 6655
WSADATA ws; SOCKET s; sockaddr_in adr; hostent* hn; char buff [MAX_PACKET_SIZE];
// Init if (WSAStartup (0x0101, &ws) != 0) { Form3->Close(); // Error
} // Создаём сокет if (INVALID_SOCKET == (s = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP) ) ) { Form3->Close(); // Error }
// Получаем адрес if (NULL == ( hn = gethostbyname ("www.ifmo.ru") ) ) { // Error Form3->Close(); }
// Заполняем поля структуры adr для использование ее в connect adr.sin_family = AF_INET; adr.sin_addr.S_un.S_addr = *(DWORD* ) hn->h_addr_list[0]; adr.sin_port = htons (80);
// Устанавливаем соединение с сервером if (SOCKET_ERROR == connect (s, (sockaddr* )&adr, sizeof (adr) ) ) { // Error Form3->Close(); }
// Посылаем запрос серверу if (SOCKET_ERROR == send (s, request, sizeof (request), 0) ) { // Error Form3->Close(); }
// Ждём ответа int len = recv (s, buff, MAX_PACKET_SIZE, 0);
if ( (len == SOCKET_ERROR) || (len == 0) ) { // Error Form3->Close(); } //AnsiString text // Выводим ответ сервера //char key[5] =["5",">","<","h","3",">"]; for ( int i = 0; i <len ; i++) {
if ((buff[i]=='5') && (buff[i+1]=='>')) {// && (buff[i+2]=='<') &&(buff[i+3]=='h')) {
Form3->Close(); }
} //outFile( " ololo.txt " ); if (SOCKET_ERROR == closesocket (s) ) // закрываем соединенеие. * {
}
|
Однако принимает ответ не полный (гдето половину), притом если отправить с помощью HTTPAnalyz приходит полный ответ.
Где ошибка не понимаю?! |