Sample code for 30+ languages & platforms
Dart

REST through SOCKS Proxy

See more REST Examples

Demonstrates how to connect through a SOCKS proxy to make REST API calls.

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.

  // This example connects to a REST server through a SOCKS proxy.
  // It will connect to the Amazon AWS service for this example.
  final rest = CkRest();
  final socket = CkSocket();

  // Set the SOCKS proxy domain or IP address, port, and SOCKS version number (4 or 5)
  socket.socksHostname = '192.168.1.100';
  socket.socksPort = 1080;
  socket.socksVersion = 5;
  // Other properties exist for specifying a SOCKS proxy login and password,
  // but these are not used in this example.

  // Connect through the HTTP proxy to the Amazon AWS server for the S3 service.
  final bTls = true;
  final port = 443;
  final maxWaitMs = 5000;
  try {
    socket.connect('s3.amazonaws.com', port, bTls, maxWaitMs);
  } on ChilkatException catch (e) {
    print('Connect Failure Error Code: ${socket.connectFailReason}');
    print(e.lastErrorText);
    return;
  }

  // Use the proxied TLS connection:
  try {
    rest.useConnection(socket, true);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // Provide AWS credentials for the REST call.
  final authAws = CkAuthAws();
  authAws.accessKey = 'AWS_ACCESS_KEY';
  authAws.secretKey = 'AWS_SECRET_KEY';
  authAws.serviceName = 's3';
  rest.setAuthAws(authAws);

  // List all buckets for the account...
  final String responseXml;
  try {
    responseXml = rest.fullRequestNoBody('GET', '/');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  final xml = CkXml();
  xml.loadXml(responseXml);

  // Show the full XML returned.
  print(xml.getXml());

  // Iterate over the buckets, showing each bucket name.
  xml.findChild2('Buckets');
  if (xml.firstChild2()) {
    print(xml.getChildContent('Name'));
    while (xml.nextSibling2()) {
      print(xml.getChildContent('Name'));
    }
  }

  // Move the internal pointer back to the root node.
  xml.getRoot2();
}