Sample code for 30+ languages & platforms
Dart

Read the REST Response Body in Chunks

See more REST Examples

Demonstrates Rest.ReadRespChunkBd, which reads the response body one chunk at a time, appending each chunk to a BinData. A return value of 0 signals the body is complete, while -1 indicates a read failure.

Background. Chunked reading lets an application process a large response incrementally rather than buffering the entire body at once. It is used after ReadResponseHeader within the staged request model.

Chilkat Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  final rest = CkRest();
  final bTls = true;
  final bAutoReconnect = true;
  try {
    rest.connect('example.com', 443, bTls, bAutoReconnect);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  try {
    rest.sendReqNoBody('GET', '/api/largefile');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  final statusCode = rest.readResponseHeader();
  if (statusCode < 0) {
    print(rest.lastErrorText);
    return;
  }

  // Check for the expected success status code.  If the response is not 200, the body is likely
  // error text formatted as JSON, XML, or HTML rather than the expected content.  In that case read
  // the body as text, report it, and return.
  if (statusCode != 200) {
    final sbError = CkStringBuilder();
    try {
      rest.readRespSb(sbError);
    } on ChilkatException catch (e) {
      print(e.lastErrorText);
      return;
    }

    print('Request failed with status code $statusCode');
    print(sbError.getAsString());
    return;
  }

  // The status code is 200.  Read the response body in chunks, appending each chunk to the BinData.
  // Each call waits until at least the requested number of bytes is available, unless the response
  // ends first.  A return value of 0 means the final bytes were returned and the body is complete;
  // -1 indicates a read failure.
  final bdBody = CkBinData();
  var chunkResult = rest.readRespChunkBd(8192, bdBody);
  while (chunkResult > 0) {
    chunkResult = rest.readRespChunkBd(8192, bdBody);
  }

  if (chunkResult < 0) {
    print(rest.lastErrorText);
    return;
  }

  print('Received ${bdBody.numBytes} bytes.');
}