Получить исходный код сайта, получить дополнительные символы, winsock

Здравствуйте, у меня есть некоторые проблемы с сокетом. Я пытаюсь получить источник веб-страницы, я получаю все, что мне нужно, но между заголовком ответа и источником страницы я получаю дополнительный символ, так что мой вопрос Почему я получаю эти дополнительные символы.

Я получаю это «18ad» откуда-то …

Источник попал со страницы:

<..>
Server: Apache-Cloud
Transfer-Encoding: chunked
Date: Thu, 27 Sep 2012 14:46:43 GMT
Connection: close
X-Cache: M18ad

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xh
<..>

шестнадцатеричный вид:

    char: X-Cache: M......18ad...<!DO
hex : 58 2D 43 61 63 68 65 3A 20 4D 0D 0D 0A 0D 0D 0A 31 38 61 64 0D 0D 0A 3C 21 44 4F

Заголовок запроса:

$GET / HTTP/1.1\r\n
Host: www.demotivation.us\r\n
Connection: close\r\n\r\n

Мой код:

char*       ip  = "www.demotivation.us";
char*       url = "92.61.41.215";

<..>
sockAddr.sin_family = AF_INET;
sockAddr.sin_addr.s_addr = inet_addr(ip);
sockAddr.sin_port = htons(80);
<..>
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
connect(s, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR_IN);

<..>

// receive source to temporary buffer
do
{
bytes = recv(s, buffer, BUFFER_SIZE, 0);
buffer[bytes] = '\0';

cout << buffer;
} while(bytes > 0);

0

Решение

18ad является частью фрагментированный схема кодирования. Это означает, что контент загружается в несколько ломти вместо одного. 18ad указывает размер следующего фрагмента (в данном случае 6317 байт).

Увидеть кодирование передачи по частям для описания.

Обратите внимание, что recv() может вернуться -1 при сбое, который должен быть проверен перед использованием в качестве индекса массива.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]