Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > посылка GET метода И прием ответа


Автор: intervisionist 23.8.2009, 09:21
Писал информер определенной страницы.
Код


#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 приходит полный ответ.

Где ошибка не понимаю?! smile 

Автор: GrayCardinal 23.8.2009, 12:11
intervisionist, 
1. не sizeof(request) а strlen(request)
2. "Accept-Encoding: deflate" Что-то не вижу где результат распаковывается smile А сжимается он примерно в два раза smile


Автор: intervisionist 24.8.2009, 04:46
2)deflate- идет без сжимания, специально проверял в HTTPAnalyz

1)Поменял. Результат тот же

Может ответ не приходит за одно сообщение?

Автор: intervisionist 24.8.2009, 05:57
Да именно это и нужно было, ответ полностью будет приходить в 2-3 раза.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)