Control Scrapoxy with a REST API

Endpoint

You can access to the commander API at http://localhost:8889/api

Authentication

Every requests must have an Authorization header.

The value is the hash base64 of the password set in the configuration (commander/password).

Instances

Get all instances

Request

GET http://localhost:8889/api/instances

Response (JSON)

Status: 200

The body contains all informations about instances.

Example:

const request = require('request');

const password = 'YOUR_COMMANDER_PASSWORD';

const opts = {
    method: 'GET',
    url: 'http://localhost:8889/api/instances',
    headers: {
        'Authorization': new Buffer(password).toString('base64'),
    },
};

request(opts, (err, res, body) => {
    if (err) return console.log('Error: ', err);

    console.log('Status: %d\n\n', res.statusCode);

    const bodyParsed = JSON.parse(body);

    console.log(bodyParsed);
});

Stop an instance

Request

POST http://localhost:8889/api/instances/stop

JSON payload:

{
  "name": "<name of the proxy>"
}

Response (JSON)

Status: 200

The instance exists.

Scrapoxy stops it. And the instance is restarted, with a new IP address.

The body contains the remaining count of alive instances.

{
  "alive": <count>
}

Status: 404

The instance does not exist.

Example:

const request = require('request');

const password = 'YOUR_COMMANDER_PASSWORD',
    instanceName = 'YOUR INSTANCE NAME';

const opts = {
    method: 'POST',
    url: 'http://localhost:8889/api/instances/stop',
    json: {
        name: instanceName,
    },
    headers: {
        'Authorization': new Buffer(password).toString('base64'),
    },
};

request(opts, (err, res, body) => {
    if (err) return console.log('Error: ', err);

    console.log('Status: %d\n\n', res.statusCode);

    console.log(body);
});

Scaling

Get the scaling

Request

GET http://localhost:8889/api/scaling

Response (JSON)

Status: 200

The body contains all the configuration of the scaling.

Example:

const request = require('request');

const password = 'YOUR_COMMANDER_PASSWORD';

const opts = {
    method: 'GET',
    url: 'http://localhost:8889/api/scaling',
    headers: {
        'Authorization': new Buffer(password).toString('base64'),
    },
};

request(opts, (err, res, body) => {
    if (err) return console.log('Error: ', err);

    console.log('Status: %d\n\n', res.statusCode);

    const bodyParsed = JSON.parse(body);

    console.log(bodyParsed);
});

Update the scaling

Request

PATCH http://localhost:8889/api/scaling

JSON payload:

{
  "min": "min_scaling",
  "required": "required_scaling",
  "max": "max_scaling",
}

Response (JSON)

Status: 200

The scaling is updated.

Status: 204

The scaling is not updated.

Example:

const request = require('request');

const password = 'YOUR_COMMANDER_PASSWORD';

const opts = {
    method: 'PATCH',
    url: 'http://localhost:8889/api/scaling',
    json: {
        min: 1,
        required: 5,
        max: 10,
    },
    headers: {
        'Authorization': new Buffer(password).toString('base64'),
    },
};

request(opts, (err, res, body) => {
    if (err) return console.log('Error: ', err);

    console.log('Status: %d\n\n', res.statusCode);

    console.log(body);
});

Configuration

Get the configuration

Request

GET http://localhost:8889/api/config

Response (JSON)

Status: 200

The body contains all the configuration of Scrapoxy (including scaling).

Example:

const request = require('request');

const password = 'YOUR_COMMANDER_PASSWORD';

const opts = {
    method: 'GET',
    url: 'http://localhost:8889/api/config',
    headers: {
        'Authorization': new Buffer(password).toString('base64'),
    },
};

request(opts, (err, res, body) => {
    if (err) return console.log('Error: ', err);

    console.log('Status: %d\n\n', res.statusCode);

    const bodyParsed = JSON.parse(body);

    console.log(bodyParsed);
});

Update the configuration

Request

PATCH http://localhost:8889/api/config

JSON payload:

{
  "key_to_override": "<new_value>",
  "section": {
    "key2_to_override": "<new value>"
  }
}

Response (JSON)

Status: 200

The configuration is updated.

Status: 204

The configuration is not updated.

Example:

const request = require('request');

const password = 'YOUR_COMMANDER_PASSWORD';

const opts = {
    method: 'PATCH',
    url: 'http://localhost:8889/api/config',
    json: {
        instance: {
            scaling: {
                max: 300,
            },
        },
    },
    headers: {
        'Authorization': new Buffer(password).toString('base64'),
    },
};

request(opts, (err, res, body) => {
    if (err) return console.log('Error: ', err);

    console.log('Status: %d\n\n', res.statusCode);

    console.log(body);
});