Отделение тела HTTP-ответа от заголовка в C ++ - PullRequest
2 голосов
/ 29 декабря 2010

В настоящее время я пишу свой собственный класс C ++ HTTP для определенного проекта.И я пытаюсь найти способ отделить тело ответа от заголовка, потому что это единственная часть, которую мне нужно вернуть.

Вот пример необработанных заголовков http, если вы с ним не знакомы:

HTTP/1.1 200 OK
Server: nginx/0.7.65
Date: Wed, 29 Dec 2010 06:13:07 GMT
Content-Type: text
Connection: keep-alive
Vary: Cookie
Content-Length: 82

Ниже это тело HTML / ответа.Каков был бы лучший способ сделать это?Кстати, я использую только библиотеку Winsock для запросов (я даже не думаю, что это имеет значение).

Заранее спасибо.

Ответы [ 3 ]

20 голосов
/ 29 декабря 2010

Заголовки HTTP завершаются последовательностью \r\n\r\n (пустая строка).Просто найдите это и верните все после.(Конечно, он может не существовать, например, если он был в ответ на запрос HEAD.)

2 голосов
/ 29 декабря 2010

Вам нужно накатить свой? Существуют библиотеки C / C ++ для выполнения HTTP, например, Libcurl . Если вам нужно поддерживать полный спектр HTTP, то это не всегда простое разграничение. Возможно, вам также придется обслуживать, например, чанкованное кодирование.

0 голосов
/ 02 февраля 2017

DO IF Socket.IsServerReady (Sock) THEN Text = text + Socket.Read (Sock, 65000) 'print text' '32000 байт ... все, что нам дают Байты = байты + Socket.Transferred StatusBar.Panel (0 ) .Caption = "Чтение байтов:" + STR $ (байт)

END IF

'RichEdit.addstrings text zzz = Bytes LOOP UNTIL Socket.Transferred = 0 RichEdit.Clear RichEdit.Text = text Socket.Close (Sock) dim mem в виде потока данных dim S $ в виде строки S $ = текст для n = 0 для 400 баффов = середина $ (S $, n, 5)

если buff $ = "alive", то 'найдено конец заголовков richedit1.addstrings (buff $) richedit1.addstrings (mid $ (S $, n, 9)) richedit1.addstrings str $ (n + 9) zzz = n + 8 'смещение + 8 бит после пробелов и до конца Bof, если следующий n Mem.WriteStr (S $, LEN (S $))' записать весь файл в память Mem.Position = zzz 'использовать смещение в качестве начальной позиции S $ = Mem.ReadStr (LEN (S $)) 'читать остаток файла в строку, пока Eof Mem.Close' не забудьте закрыть 'PRINT S $' 'распечатать его

Filex.Open ("c: /CAP.AVI", fmCreate) 'создать файл в системном файле x.WriteBinStr (S $, len (S $) - zzz)' записать в него filex.close 'не забудьте закрыть

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...