Лучшее место для начала - http 1.1 specification, в котором описывается, как работает блок. В частности, раздел 3.6.1.
3.6.1 поблочное Кодирование
фрагментированное кодирование изменяет тела сообщения для того, чтобы
передачи его в виде ряда кусков, каждой со своим собственным индикатором размера, а затем
с помощью ДОПОЛНИТЕЛЬНОГО трейлера , содержащего поля заголовка объекта. Это позволяет динамически создаваемому содержимому быть переданы вместе с
информации, необходимой для получателя , чтобы убедиться, что он имеет
получил полное сообщение.
Chunked-Body = *chunk
last-chunk
trailer
CRLF
chunk = chunk-size [ chunk-extension ] CRLF
chunk-data CRLF
chunk-size = 1*HEX
last-chunk = 1*("0") [ chunk-extension ] CRLF
chunk-extension= *(";" chunk-ext-name [ "=" chunk-ext-val ])
chunk-ext-name = token
chunk-ext-val = token | quoted-string
chunk-data = chunk-size(OCTET)
trailer = *(entity-header CRLF)
Поле размера куска является строкой шестнадцатеричных цифр, указывающего размером
фрагмента. Кодовое кодирование - , которое заканчивается любым фрагментом, размер которого равен
ноль, за которым следует трейлер, который заканчивается пустой линией.
Прицеп позволяет отправителю включать дополнительный HTTP-заголовок
полей в конце сообщения. Поле заголовка трейлера может использоваться для . Укажите, какие поля заголовка включены в трейлер (см. Раздел 14.40).
Предполагая, что вы уже прочитали заголовок из ответа и указывают на следующий байт в потоке ваш псевдо-код будет выглядеть примерно так:
done = false;
uint8 bytes[];
while (!done)
{
chunksizeString = readuntilCRLF(); // read in the chunksize as a string
chunksizeString.strip(); // strip off the CRLF
chunksize = chunksizeString.convertHexString2Int(); // convert the hex string to an integer.
bytes.append(readXBytes(chunksize)); // read in the x bytes and append them to your buffer.
readCRLF(); // read the trailing CRLF and throw it away.
if (chunksize == 0)
done = true; //
}
// now read the trailer if any
// trailer is optional, so it may be just the empty string
trailer = readuntilCRLF()
trailer = trailer.strip()
if (trailer != "")
readCRLF(); // read out the last CRLF and we are done.
Это игнорируя чанка-расширение но поскольку он разделен символом ";" его легко разбить. Этого должно быть достаточно, чтобы вы начали. Имейте в виду, что строка chunksize не имеет ведущий «0x».
еще раз спасибо, теперь он работает просто отлично. –