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


Автор: batraq 20.12.2008, 21:49
Доброго времени суток всем. Вопрос заключается в том, что никак не могу получить результирующий html код первой странички. Вот примерный код
Код

bool ASocket::asConnectSocket(SOCKET &socket)
{
    char *address = "freekino.timeout.ru";
//    char *address = "www.yandex.ru";
    hostent *host = gethostbyname(address);
    in_addr ip;
    memcpy ((char*)&ip, host -> h_addr, host -> h_length);


    SOCKADDR_IN socketaddr = {0};
    socketaddr.sin_family = PF_INET;
    socketaddr.sin_port = htons(80);
    socketaddr.sin_addr.s_addr = inet_addr(inet_ntoa(ip));

    char *packet = "GET /index.htm HTTP/1.1\r\nHOST: freekino.timeout.ru\r\n";
    int res = connect(socket, (struct sockaddr *)&socketaddr, sizeof(socketaddr));
    res = send(socket, packet, strlen(packet), 0);
    shutdown(socket, SD_SEND);

    char buffer[1024] = {0};
    do
    {
        res = recv(socket, buffer, 1024, 0);
        printf(buffer);
    }
    while(res > 0);

    return true;
}

Как мне кажется http запрос не верен потому как ответа нет вообще никакого, ни байта. Может кто подскажет где косяк? Все структуры и инициализации сокетов проходят успешно. Сам сервак пингуется и доступен.

Автор: Void 21.12.2008, 01:12
Читать http://tools.ietf.org/html/rfc2616.
Минимальный запрос:
Код

"GET / HTTP/1.1\r\n"
"Host: www.example.com\r\n"
"\r\n"

Автор: J0ker 25.12.2008, 21:21
хедер должен заканчиваться пустой строкой
минимальный запрос "GET / HTTP/1.0\n\n"

Автор: Void 25.12.2008, 21:36
Цитата(J0ker @  25.12.2008,  23:21 Найти цитируемый пост)
"GET / HTTP/1.0\n\n" 

\r\n

HTTP/1.1 требует заголовок Host, с учётом распространённости виртуального хостинга не посылать его было бы опрометчиво.

Автор: J0ker 26.12.2008, 02:03
да, действительно сверился со стандартом - \r\n

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