Sample code for 30+ languages & platforms
Dart Requires Chilkat v11.0.0+

Parse Multipart Binary Http Response

See more HTTP Examples

This example demonstrates how to parse an HTTP response that is multipart and contains a binary file, such as a .zip or .pdf.

Chilkat Dart Downloads

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

void main() {
  // This example requires the Chilkat API to have been previously unlocked.
  // See Global Unlock Sample for sample code.

  final http = CkHttp();
  final req = CkHttpRequest();

  // ...
  // Insert code here to construct some kind of HTTP request.
  // this example is to show how to parse a particular kind of response.
  // ...
  // ...

  // Send the request (whatever it may be in your case) to get the HTTP response object.
  final resp = CkHttpResponse();
  try {
    http.httpSReq('www.somedomain.com', 443, true, req, resp);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // Get the response body (which is expected to be binary)
  final respBody = CkBinData();
  resp.getBodyBd(respBody);

  // For this example, the response body contains something like this:

  // ------=_Part_21302_2029949381.1547401515443
  // Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
  // Content-Transfer-Encoding: 8bit
  // Content-ID: <rootpart@ws.jboss.org>
  // 
  // <env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'><env:Header></env:Header><env:Body>...</env:Body></env:Envelope>
  // ------=_Part_21302_2029949381.1547401515443
  // Content-Type: application/octet-stream
  // Content-Transfer-Encoding: binary
  // Content-Id: <fileArchivio-7d302908-4d64-43d3-bf4e-79ce806d43b3@ws.jboss.org>
  // 
  // BINARY_CONTENT_HERE...
  // 
  // ------=_Part_21302_2029949381.1547401515443--
  // 

  // Load it into a Chilkat MIME object.
  final mime = CkMime();
  try {
    mime.loadMimeBd(respBody);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  final numParts = mime.numParts;
  if (numParts < 2) {
    print('Expected multipart MIME with at least 2 sub-parts.');
    return;
  }

  // Get the 1st sub-part, which is the XML.

  final part0 = CkMime();
  mime.partAt(0, part0);

  // Should be OK because we checked NumParts above..
  final xmlStr = part0.getBodyDecoded();
  print(xmlStr);
  print('----');

  // Save the 2nd part to a file.  (It is a .zip file in our test case..)

  final part1 = CkMime();
  mime.partAt(1, part1);

  part1.saveBody('qa_output/attachedZip.zip');

  // Alternatively, we could extract the binary data to a BinData and use elsewhere..
  final zipData = CkBinData();
  part1.getBodyBd(zipData);
  zipData.writeFile('qa_output/attachedZip_again.zip');

  print('OK.');
}