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

REST through SSH Tunnel

See more REST Examples

Demonstrates how to connect through an SSH Tunnel (via port-forwarding) to make REST API calls.

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.AuthAws;
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.Rest;
import com.chilkatsoft.chilkat2.Socket;
import com.chilkatsoft.chilkat2.Xml;

public class ChilkatExample {

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

        Socket tunnel = new Socket();

        String sshHostname = "sftp.example.com";
        int sshPort = 22;

        // Connect to an SSH server and establish the SSH tunnel:
        try {
            tunnel.sshOpenTunnel(sshHostname, sshPort);

            // Authenticate with the SSH server via a login/password
            // or with a public key.
            // This example demonstrates SSH password authentication.
            tunnel.sshAuthenticatePw("mySshLogin", "mySshPassword");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        //  OK, the SSH tunnel is setup.  Now open a channel within the tunnel.
        //  (Any number of channels may be created from the same SSH tunnel.
        //  Multiple channels may coexist at the same time.)

        // This example connects to a REST server through the SSH tunnel.
        // It will connect to the Amazon AWS service for this example.
        Rest rest = new Rest();

        boolean bTls = true;
        int port = 443;
        int maxWaitMs = 5000;

        // This returns a socket object that is a single channel within the SSH tunnel.
        Socket channel = new Socket();
        try {
            tunnel.sshNewChannel("s3.amazonaws.com", port, bTls, maxWaitMs, channel);

            // Use the connection.  (This connection is a TLS running on an SSH channel through an SSH tunnel.
            // In other words, TLS is wrapped within the SSH tunnel.)
            rest.useConnection(channel, true);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Provide AWS credentials for the REST call.
        AuthAws authAws = new AuthAws();
        authAws.setAccessKey("AWS_ACCESS_KEY");
        authAws.setSecretKey("AWS_SECRET_KEY");
        authAws.setServiceName("s3");
        rest.setAuthAws(authAws);

        // List all buckets for the account...
        String responseXml;
        try {
            responseXml = rest.fullRequestNoBody("GET", "/");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        Xml xml = new Xml();
        xml.loadXml(responseXml);

        // Show the full XML returned.
        System.out.println(xml.getXml());

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

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