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:
```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.01 real 0.00 user 0.00 sys 7290880 maximum resident set size 0 average shared memory size 0 average unshared data size 0 average unshared stack size 1841 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 85 involuntary context switches
/usr/bin/time -l curl localhost:8000 It works! 0.02 real 0.00 user 0.00 sys 4956160 maximum resident set size 0 average shared memory size 0 average unshared data size 0 average unshared stack size 1259 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 28 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.62 real 0.41 user 0.18 sys
26628096 maximum resident set size 0 average shared memory size 0 average unshared data size 0 average unshared stack size 26378 page reclaims 0 page faults 0 swaps 0 block input operations 0 block output operations 10 messages sent 10 messages received 25 signals received 77 voluntary context switches 524 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.06 real 0.37 user 0.21 sys
26618280 maximum resident set size 0 average shared memory size 0 average unshared data size 0 average unshared stack size 25678 page reclaims 684 page faults 0 swaps 133 block input operations 0 block output operations 11 messages sent 11 messages received 25 signals received 669 voluntary context switches 675 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.