Skip to content

Brodyzera/netmeg

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

netmeg : CLI for Sending Concurrent HTTP/S Requests

Installation

go get github.com/brodyzera/netmeg

Running the command above will install netmeg to your GOPATH (assuming that you have Go installed).

If desired, you can also download the compiled binaries from the releases page. Compiled binaries are supplied for both Linux and Windows.

Usage

At this point in time, there are two sub-commands for netmeg; request and load.

netmeg request

Flags:
  -n, --amount int       Amount of requests to send (default 1)
      --bfile string     File containing Request body (overrides --body and -b flags)
  -b, --body string      Request body
  -H, --headers string   Header list formated as {key}:{value}, separated by commas
  -h, --help             help for request
      --hfile string     File containing Headers (overrides --headers and -H flags)
  -m, --method string    HTTP method to use for the request (default "get")
      --mode string      Output mode for result (console, file, or both) (default "console")
  -o, --output string    Path to file for results (default "results-{timestamp}.json")
  -u, --url string       URL to send the request to

The only "required" flag is --url, meaning that if you simply want to send a GET request to "https://localhost", your command would look like this;

netmeg request --url https://localhost

This works since --amount defaults to 1, and --method defaults to GET. Note that --mode defaults to console, meaning that the command's results will be written to your standard console. Valid values for --mode are console, file, or both.

To send multiple requests (in parallel), use the --amount flag.

netmeg request -u https://localhost --amount 5

The command above will send 5 GET requests to https://localhost in parallel.

Lets try a more complex command;

netmeg request -u https://jsonplaceholder.typicode.com/posts -m POST -n 10 -b "{\"title\": \"This is a title.\"}" -H "Content-Type:application/json, Test:123" -o post-response.log --mode file

This command will send 10 POST requests to https://jsonplaceholder.typicode.com/posts with the specified Headers and Post Body. The --mode and -o flags ensure that the results are written to the file post-response.log in our current working directory, rather than printing the results to our standard console. If you don't supply a filename when using file mode, a file named results-{timestamp}.json will be created in your current working directory.

If you include {timestamp} in the filename for the --output flag, like this;

netmeg request -u https://localhost --amount 5 --mode file -o get-results-{timestamp}.json

your system's current date and time (year|month|day|hour|minute|second) will be injected in to request result filename.

Note the double quotes around the in-line -b and -H values, as well as the backslash-escaped double quotes within the JSON Post Body. If you are passing in a Request Body or Headers, use pre-made files instead.

netmeg request -u https://jsonplaceholder.typicode.com/posts -m POST -n 10 --bfile ./resources/body.json --hfile ./resources/headers.txt -o ./output/post-response.log --mode both

In our current working directory, we have a folder named resources which contains the files body.json and headers.txt. These files are referenced using the --hfile and --bfile flags, rather than the -b and -H flags. Also note that the --mode is set to both, meaning that the request results will be written to both a file as well as the console.

netmeg load

You can also load pre-built requests from JSON files. For example, create a JSON Array of JSON objects, like so;

requests.json

[
    {
        "description": "Simple Google GET x 5",
        "url": "https://google.com",
        "method": "get",
        "amount": 5,
        "body": "",
        "headers": "",
        "bfile": "",
        "hfile": "",
        "output": "",
        "mode": "file"
    },
    {
        "description": "JSON Placeholder test site POST x 10",
        "url": "https://jsonplaceholder.typicode.com/posts",
        "method": "POST",
        "amount": 10,
        "body": "{\"title\": \"This is a title.\"}",
        "headers": "Content-Type:application/json",
        "bfile": "",
        "hfile": "",
        "output": "post-response.log",
        "mode": "both"
    }
]

With the above JSON saved in requests.json, we can now load it using

netmeg load -f requests.json

The requests saved in requests.json will execute sequentially (although the specified amount per request will still run asynchronously).

Results and Output

Output from both the file and console modes will be identical.

Example Output

new_request
Status_Code: 200
Response_Time: 0.339s
Body: This is a test response body

new_request
Status_Code: 200
Response_Time: 0.98s
Body: This is another test response body

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

License

Apache 2.0.

About

CLI for Sending Concurrent HTTP/S Requests

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages