Skip to content

Basic Usage

Usman Shahid edited this page Feb 8, 2019 · 5 revisions

The shhttp daemon creates an HTTP service that by default listens on path /v1/ for HTTP requests with JSON content. If the daemon is run with the defaults, the service will listen on http://localhost:2112/v1.

Immediate execution (/exec)

You can submit a single command/script on the /v1/exec path by doing a POST on it with the following body:

POST http://localhost:2112/v1/exec
{
	"Command": "echo",
	"Args": ["shhttp is awesome"]
}

The command/script will be performed and the result will be returned as follows:

{
    "Executable": {
        "Command": "echo",
        "Args": [
            "shhttp is awesome"
        ],
        "ExecPath": "",
        "Stdin": "",
        "Shell": false
    },
    "Stdout": "shhttp is awesome\n",
    "Stderr": "",
    "ExitCode": 0,
    "Start": 1549611855,
    "End": 1549611855
}

The command is executed as an exec call which is why shell based expansion is not performed, for example, the following will will not perform as expected:

POST http://localhost:2112/v1/exec
{
	"Command": "echo",
	"Args": ["shhttp is awesome", "|", "grep", "awesome"]
}

will return

{
    "Executable": {
        "Command": "echo",
        "Args": [
            "shhttp is awesome",
            "|",
            "grep",
            "awesome"
        ],
        "ExecPath": "",
        "Stdin": "",
        "Shell": false
    },
    "Stdout": "shhttp is awesome | grep awesome\n",
    "Stderr": "",
    "ExitCode": 0,
    "Start": 1549612162,
    "End": 1549612162
}

To make the shell work, you need to set the Shell property in the request:

POST http://localhost:2112/v1/exec
{
	"Command": "echo",
	"Args": ["shhttp is awesome", "|", "grep", "awesome"],
	"Shell": true
}

resulting in:

{ "Executable": { "Command": "echo", "Args": [ "shhttp is awesome", "|", "grep", "awesome" ], "ExecPath": "", "Stdin": "", "Shell": true }, "Stdout": "shhttp is awesome\n", "Stderr": "", "ExitCode": 0, "Start": 1549612268, "End": 1549612268 }

For this, the default shell `sh` is used.

#### Executable schema

The full body of the request is as follows:

{ "Command": "(string) The command to execute", "Args": "(string []) Array of arguments to pass to the above command", "BaseDir": "(string) The directory from which the command should be invoked", "Stdin": "(string) This string will be piped into the stdin of the command", "Shell": "(bool) Whether to execute this command on shell" }

Clone this wiki locally