A fast, opinionated command line HTTP client.
Fundamentally, rust-client
is a thin wrapper around Rust's fantastic reqwest
library. Unlike curl
, however, it is designed more as a debugging tool. Headers are displayed above the response body, the command line interface is more intuitive than remembering flags, and default en-/decoding behavior.
The following is a totally unscientific benchmark using /usr/bin/time
to finely measure memory usage and timing for rust-client
, curl
, and Python http
; on my very old development box. Each app was run 5 times on a warm cache, with the following being the averages:
```sh
/usr/bin/time -l rc get localhost:8000 GET http://localhost:8000/ HTTP/1.1 200 OK content-length: 9
date: Tue, 10 Jul 2018 14:21:55 GMT
It works! 0.03 real 0.01 user 0.01 sys 9494528 maximum resident set size 0 average shared memory size 0 average unshared data size 0 average unshared stack size 2376 page reclaims 0 page faults 0 swaps 0 block input operations 0 block output operations 10 messages sent 10 messages received 0 signals received 4 voluntary context switches 95 involuntary context switches
/usr/bin/time -l curl localhost:8000 It works! 0.03 real 0.01 user 0.00 sys 5005312 maximum resident set size 0 average shared memory size 0 average unshared data size 0 average unshared stack size 1272 page reclaims 0 page faults 0 swaps 0 block input operations 0 block output operations 10 messages sent 10 messages received 0 signals received 7 voluntary context switches 47 involuntary context switches
/usr/bin/time -l http localhost:8000 HTTP/1.1 200 OK content-length: 9 date: Tue, 10 Jul 2018 14:24:20 GMT
It works!
0.80 real 0.45 user 0.26 sys
26623181 maximum resident set size 0 average shared memory size 0 average unshared data size 0 average unshared stack size 33318 page reclaims 0 page faults 0 swaps 0 block input operations 0 block output operations 10 messages sent 10 messages received 30 signals received 100 voluntary context switches 1012 involuntary context switches ```
Note, the measurement of http
is after warming up the Python runtime using multiple runs of http
. The following is the initial result:
```sh HTTP/1.1 200 OK content-length: 9 date: Tue, 10 Jul 2018 14:23:53 GMT
It works!
3.75 real 0.46 user 0.36 sys
26664960 maximum resident set size 0 average shared memory size 0 average unshared data size 0 average unshared stack size 32776 page reclaims 535 page faults 0 swaps 148 block input operations 0 block output operations 14 messages sent 14 messages received 29 signals received 761 voluntary context switches 1263 involuntary context switches ```
While rust-client
and curl
perform similarly, curl
does not print the same level of information that rust-client
does.
The test server is the example server from hyper
's documentation.
[x] Have Command
include request body from RunConfig
[ ] Add JSON
and Form
arguments which automatically set headers and serialize appropriately
[ ] Allow adding arbitrary headers to request
[ ] Add documentation to major types and functions
[ ] Flag to disable ansi escaping for output
[ ] HTML pretty printing
[ ] encode body content in a specific format (JSON, YAML, etc)
[ ] decode response based on Content-Type