Crates.io | dothttp |
lib.rs | dothttp |
version | 0.9.0 |
source | src |
created_at | 2023-10-28 00:04:16.010527 |
updated_at | 2024-02-26 03:52:47.217921 |
description | dothttp is a text-based scriptable HTTP client. It is a fork for dot-http. It is a simple language that resembles the actual HTTP protocol but with additional features to make it practical for someone who builds and tests APIs. |
homepage | |
repository | https://github.com/alisa101rs/dothttp |
max_upload_size | |
id | 1016574 |
size | 230,968 |
dothttp
is a text-based scriptable HTTP client.
It is a simple language that resembles the actual HTTP protocol but with just a smidgen of magic to make it more practical for someone who builds and tests APIs.
The difference from dot-http is that dothttp
aims to provide full compatability with IntelliJ Http Client.
Current list of feature support:
$random
, $timestamp
and $isoTimestamp
The easiest way for most users is simply to download the prebuilt binaries. You can find binaries for various platforms on the release page.
First, install cargo. Then:
$ cargo install dothttp
You will need to use the stable release for this to work; if in doubt run
rustup run stable cargo install dothttp
You can also use nix
(with flakes) to run and use dothttp
:
$ nix run github:alisa101rs/dothttp
See dothttp --help
for usage.
The request format is intended to resemble HTTP as close as possible. HTTP was initially designed to be human-readable and simple, so why not use that?
simple.http
GET http://httpbin.org
Accept: */*
Executing that script just prints the response to stdout:
$ dothttp simple.http
GET http://httpbin.org/get
HTTP/1.1 200 OK
access-control-allow-credentials: true
access-control-allow-origin: *
content-type: application/json
date: Sat, 18 Jan 2020 20:48:50 GMT
referrer-policy: no-referrer-when-downgrade
server: nginx
x-content-type-options: nosniff
x-frame-options: DENY
x-xss-protection: 1; mode=block
content-length: 170
connection: keep-alive
{
"args": {},
"headers": {
"Accept": "*/*",
"Host": "httpbin.org"
},
"url": "https://httpbin.org/get"
}
Use variables to build the scripts dynamically, either pulling data from your environment file or from a previous request's response handler.
simple_with_variables.http
POST http://httpbin.org/post
Accept: */*
X-Auth-Token: {{token}}
{
"id": {{env_id}}
}
http-client.env.json
{
"dev": {
"env_id": 42,
"token": "SuperSecretToken"
}
}
Note that the variables are replaced by their values
$ dothttp simple_with_variables.http
POST http://httpbin.org/post
HTTP/1.1 200 OK
access-control-allow-credentials: true
access-control-allow-origin: *
content-type: application/json
date: Sat, 18 Jan 2020 20:55:24 GMT
referrer-policy: no-referrer-when-downgrade
server: nginx
x-content-type-options: nosniff
x-frame-options: DENY
x-xss-protection: 1; mode=block
content-length: 342
connection: keep-alive
{
"args": {},
"data": "{\r\n \"id\": 42\r\n}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Content-Length": "18",
"Host": "httpbin.org",
"X-Auth-Token": "SuperSecretToken"
},
"json": {
"id": 42
},
"url": "https://httpbin.org/post"
}
Use an environment file to control what initial values variables have
http-client.env.json
{
"dev": {
"host": localhost,
"token": "SuperSecretToken"
},
"prod": {
"host": example.com,
"token": "ProductionToken"
}
}
env_demo.http
GET http://{{host}}
X-Auth-Token: {{token}}
Specifying different environments when invoking the command results in different values for the variables in the script
$ dothttp -e dev env_demo.http
GET http://localhost
X-Auth-Token: SuperSecretToken
$ dothttp -e prod env_demo.htp
GET http://example.com
X-Auth-Token: ProductionToken
Use previous requests to populate some of the data in future requests
response_handler.http
POST http://httpbin.org/post
Content-Type: application/json
{
"token": "sometoken",
"id": 237
}
> {%
client.global.set('auth_token', response.body.json.token);
client.global.set('some_id', response.body.json.id);
%}
###
PUT http://httpbin.org/put
X-Auth-Token: {{auth_token}}
{
"id": {{some_id}}
}
Data from a previous request
$ dothttp test.http
POST http://httpbin.org/post
HTTP/1.1 200 OK
access-control-allow-credentials: true
access-control-allow-origin: *
content-type: application/json
date: Sat, 18 Jan 2020 21:01:59 GMT
referrer-policy: no-referrer-when-downgrade
server: nginx
x-content-type-options: nosniff
x-frame-options: DENY
x-xss-protection: 1; mode=block
content-length: 404
connection: keep-alive
{
"args": {},
"data": "{\r\n \"token\": \"sometoken\",\r\n \"id\": 237\r\n}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Content-Length": "46",
"Content-Type": "application/json",
"Host": "httpbin.org"
},
"json": {
"id": 237,
"token": "sometoken"
},
"url": "https://httpbin.org/post"
}
Contributions and suggestions are very welcome!
Please create an issue before submitting a PR, PRs will only be accepted if they reference an existing issue. If you have a suggested change please create an issue first so that we can discuss it.