mirror of
https://github.com/ducaale/xh.git
synced 2025-05-05 15:32:50 +00:00
460 lines
13 KiB
Groff
460 lines
13 KiB
Groff
.TH XH 1 2025-02-18 0.24.0 "User Commands"
|
|
|
|
.SH NAME
|
|
xh \- Friendly and fast tool for sending HTTP requests
|
|
|
|
.SH SYNOPSIS
|
|
.B xh
|
|
[\fIOPTIONS\fR]
|
|
[\fIMETHOD\fR]
|
|
\fIURL\fR
|
|
[\-\-\]
|
|
[\fIREQUEST_ITEM\fR ...]
|
|
|
|
.SH DESCRIPTION
|
|
|
|
\fBxh\fR is an HTTP client with a friendly command line interface. It strives to
|
|
have readable output and easy-to-use options.
|
|
|
|
xh is mostly compatible with HTTPie: see \fBhttp\fR(1).
|
|
|
|
The \fB--curl\fR option can be used to print a \fBcurl\fR(1) translation of the
|
|
command instead of sending a request.
|
|
|
|
.SH POSITIONAL ARGUMENTS
|
|
.TP 4
|
|
[\fIMETHOD\fR]\fI
|
|
The HTTP method to use for the request.
|
|
|
|
This defaults to GET, or to POST if the request contains a body.
|
|
.TP
|
|
\fIURL\fR
|
|
The URL to request.
|
|
|
|
The URL scheme defaults to "http://" normally, or "https://" if
|
|
the program is invoked as "xhs".
|
|
|
|
A leading colon works as shorthand for localhost. ":8000" is equivalent
|
|
to "localhost:8000", and ":/path" is equivalent to "localhost/path".
|
|
.TP
|
|
[\fIREQUEST_ITEM\fR ...]
|
|
Optional key\-value pairs to be included in the request.
|
|
|
|
The separator is used to determine the type:
|
|
.RS 8
|
|
.TP 4
|
|
key==value
|
|
Add a query string to the URL.
|
|
.TP 4
|
|
key=value
|
|
Add a JSON property (\-\-json) or form field (\-\-form) to
|
|
the request body.
|
|
.TP 4
|
|
key:=value
|
|
Add a field with a literal JSON value to the request body.
|
|
|
|
Example: "numbers:=[1,2,3] enabled:=true"
|
|
.TP 4
|
|
key@filename
|
|
Upload a file (requires \-\-form or \-\-multipart).
|
|
|
|
To set the filename and mimetype, ";type=" and
|
|
";filename=" can be used respectively.
|
|
|
|
Example: "pfp@ra.jpg;type=image/jpeg;filename=profile.jpg"
|
|
.TP 4
|
|
@filename
|
|
Use a file as the request body.
|
|
.TP 4
|
|
header:value
|
|
Add a header, e.g. "user\-agent:foobar"
|
|
.TP 4
|
|
header:
|
|
Unset a header, e.g. "connection:"
|
|
.TP 4
|
|
header;
|
|
Add a header with an empty value.
|
|
.RE
|
|
|
|
.RS
|
|
An "@" prefix can be used to read a value from a file. For example: "x\-api\-key:@api\-key.txt".
|
|
|
|
A backslash can be used to escape special characters, e.g. "weird\\:key=value".
|
|
|
|
To construct a complex JSON object, the REQUEST_ITEM's key can be set to a JSON path instead of a field name.
|
|
For more information on this syntax, refer to https://httpie.io/docs/cli/nested\-json.
|
|
.RE
|
|
|
|
.SH OPTIONS
|
|
Each --OPTION can be reset with a --no-OPTION argument.
|
|
.TP 4
|
|
\fB\-j\fR, \fB\-\-json\fR
|
|
(default) Serialize data items from the command line as a JSON object.
|
|
|
|
Overrides both \-\-form and \-\-multipart.
|
|
.TP 4
|
|
\fB\-f\fR, \fB\-\-form\fR
|
|
Serialize data items from the command line as form fields.
|
|
|
|
Overrides both \-\-json and \-\-multipart.
|
|
.TP 4
|
|
\fB\-\-multipart\fR
|
|
Like \-\-form, but force a multipart/form\-data request even without files.
|
|
|
|
Overrides both \-\-json and \-\-form.
|
|
.TP 4
|
|
\fB\-\-raw\fR=\fIRAW\fR
|
|
Pass raw request data without extra processing.
|
|
.TP 4
|
|
\fB\-\-pretty\fR=\fISTYLE\fR
|
|
Controls output processing. Possible values are:
|
|
|
|
all (default) Enable both coloring and formatting
|
|
colors Apply syntax highlighting to output
|
|
format Pretty\-print json and sort headers
|
|
none Disable both coloring and formatting
|
|
|
|
Defaults to "format" if the NO_COLOR env is set and to "none" if stdout is not tty.
|
|
.TP 4
|
|
\fB\-\-format\-options\fR=\fIFORMAT_OPTIONS\fR
|
|
Set output formatting options. Supported option are:
|
|
|
|
json.indent:<NUM>
|
|
json.format:<true|false>
|
|
headers.sort:<true|false>
|
|
|
|
Example: \-\-format\-options=json.indent:2,headers.sort:false.
|
|
.TP 4
|
|
\fB\-s\fR, \fB\-\-style\fR=\fITHEME\fR
|
|
Output coloring style.
|
|
|
|
[possible values: auto, solarized, monokai, fruity]
|
|
.TP 4
|
|
\fB\-\-response\-charset\fR=\fIENCODING\fR
|
|
Override the response encoding for terminal display purposes.
|
|
|
|
Example: \-\-response\-charset=latin1.
|
|
.TP 4
|
|
\fB\-\-response\-mime\fR=\fIMIME_TYPE\fR
|
|
Override the response mime type for coloring and formatting for the terminal.
|
|
|
|
Example: \-\-response\-mime=application/json.
|
|
.TP 4
|
|
\fB\-p\fR, \fB\-\-print\fR=\fIFORMAT\fR
|
|
String specifying what the output should contain
|
|
|
|
'H' request headers
|
|
'B' request body
|
|
'h' response headers
|
|
'b' response body
|
|
'm' response metadata
|
|
|
|
Example: \-\-print=Hb.
|
|
.TP 4
|
|
\fB\-h\fR, \fB\-\-headers\fR
|
|
Print only the response headers. Shortcut for \-\-print=h.
|
|
.TP 4
|
|
\fB\-b\fR, \fB\-\-body\fR
|
|
Print only the response body. Shortcut for \-\-print=b.
|
|
.TP 4
|
|
\fB\-m\fR, \fB\-\-meta\fR
|
|
Print only the response metadata. Shortcut for \-\-print=m.
|
|
.TP 4
|
|
\fB\-v\fR, \fB\-\-verbose\fR
|
|
Print the whole request as well as the response.
|
|
|
|
Additionally, this enables \-\-all for printing intermediary requests/responses while following redirects.
|
|
|
|
Using verbose twice i.e. \-vv will print the response metadata as well.
|
|
|
|
Equivalent to \-\-print=HhBb \-\-all.
|
|
.TP 4
|
|
\fB\-\-debug\fR
|
|
Print full error stack traces and debug log messages.
|
|
|
|
Logging can be configured in more detail using the `$RUST_LOG` environment variable. Set `RUST_LOG=trace` to show even more messages. See https://docs.rs/env_logger/0.11.3/env_logger/#enabling\-logging.
|
|
.TP 4
|
|
\fB\-\-all\fR
|
|
Show any intermediary requests/responses while following redirects with \-\-follow.
|
|
.TP 4
|
|
\fB\-P\fR, \fB\-\-history\-print\fR=\fIFORMAT\fR
|
|
The same as \-\-print but applies only to intermediary requests/responses.
|
|
.TP 4
|
|
\fB\-q\fR, \fB\-\-quiet\fR
|
|
Do not print to stdout or stderr.
|
|
|
|
Using quiet twice i.e. \-qq will suppress warnings as well.
|
|
.TP 4
|
|
\fB\-S\fR, \fB\-\-stream\fR
|
|
Always stream the response body.
|
|
.TP 4
|
|
\fB\-x\fR, \fB\-\-compress\fR
|
|
Content compressed (encoded) with Deflate algorithm.
|
|
|
|
The Content\-Encoding header is set to deflate.
|
|
|
|
Compression is skipped if it appears that compression ratio is negative. Compression can be forced by repeating this option.
|
|
|
|
Note: Compression cannot be used if the Content\-Encoding request header is present.
|
|
.TP 4
|
|
\fB\-o\fR, \fB\-\-output\fR=\fIFILE\fR
|
|
Save output to FILE instead of stdout.
|
|
.TP 4
|
|
\fB\-d\fR, \fB\-\-download\fR
|
|
Download the body to a file instead of printing it.
|
|
|
|
The Accept\-Encoding header is set to identify and any redirects will be followed.
|
|
.TP 4
|
|
\fB\-c\fR, \fB\-\-continue\fR
|
|
Resume an interrupted download. Requires \-\-download and \-\-output.
|
|
.TP 4
|
|
\fB\-\-session\fR=\fIFILE\fR
|
|
Create, or reuse and update a session.
|
|
|
|
Within a session, custom headers, auth credentials, as well as any cookies sent by the server persist between requests.
|
|
.TP 4
|
|
\fB\-\-session\-read\-only\fR=\fIFILE\fR
|
|
Create or read a session without updating it form the request/response exchange.
|
|
.TP 4
|
|
\fB\-A\fR, \fB\-\-auth\-type\fR=\fIAUTH_TYPE\fR
|
|
Specify the auth mechanism.
|
|
|
|
[possible values: basic, bearer, digest]
|
|
.TP 4
|
|
\fB\-a\fR, \fB\-\-auth\fR=\fIUSER\fR[\fI:PASS\fR] | \fITOKEN\fR
|
|
Authenticate as USER with PASS (\-A basic|digest) or with TOKEN (\-A bearer).
|
|
|
|
PASS will be prompted if missing. Use a trailing colon (i.e. "USER:") to authenticate with just a username.
|
|
|
|
TOKEN is expected if \-\-auth\-type=bearer.
|
|
.TP 4
|
|
\fB\-\-ignore\-netrc\fR
|
|
Do not use credentials from .netrc.
|
|
.TP 4
|
|
\fB\-\-offline\fR
|
|
Construct HTTP requests without sending them anywhere.
|
|
.TP 4
|
|
\fB\-\-check\-status\fR
|
|
(default) Exit with an error status code if the server replies with an error.
|
|
|
|
The exit code will be 4 on 4xx (Client Error), 5 on 5xx (Server Error), or 3 on 3xx (Redirect) if \-\-follow isn't set.
|
|
|
|
If stdout is redirected then a warning is written to stderr.
|
|
.TP 4
|
|
\fB\-F\fR, \fB\-\-follow\fR
|
|
Do follow redirects.
|
|
.TP 4
|
|
\fB\-\-max\-redirects\fR=\fINUM\fR
|
|
Number of redirects to follow. Only respected if \-\-follow is used.
|
|
.TP 4
|
|
\fB\-\-timeout\fR=\fISEC\fR
|
|
Connection timeout of the request.
|
|
|
|
The default value is "0", i.e., there is no timeout limit.
|
|
.TP 4
|
|
\fB\-\-proxy\fR=\fIPROTOCOL:URL\fR
|
|
Use a proxy for a protocol. For example: \-\-proxy https:http://proxy.host:8080.
|
|
|
|
PROTOCOL can be "http", "https" or "all".
|
|
|
|
If your proxy requires credentials, put them in the URL, like so: \-\-proxy http:socks5://user:password@proxy.host:8000.
|
|
|
|
You can specify proxies for multiple protocols by repeating this option.
|
|
|
|
The environment variables "http_proxy" and "https_proxy" can also be used, but are completely ignored if \-\-proxy is passed.
|
|
.TP 4
|
|
\fB\-\-verify\fR=\fIVERIFY\fR
|
|
If "no", skip SSL verification. If a file path, use it as a CA bundle.
|
|
|
|
Specifying a CA bundle will disable the system's built\-in root certificates.
|
|
|
|
"false" instead of "no" also works. The default is "yes" ("true").
|
|
.TP 4
|
|
\fB\-\-cert\fR=\fIFILE\fR
|
|
Use a client side certificate for SSL.
|
|
.TP 4
|
|
\fB\-\-cert\-key\fR=\fIFILE\fR
|
|
A private key file to use with \-\-cert.
|
|
|
|
Only necessary if the private key is not contained in the cert file.
|
|
.TP 4
|
|
\fB\-\-ssl\fR=\fIVERSION\fR
|
|
Force a particular TLS version.
|
|
|
|
"auto" gives the default behavior of negotiating a version with the server.
|
|
|
|
[possible values: auto, tls1, tls1.1, tls1.2, tls1.3]
|
|
.TP 4
|
|
\fB\-\-native\-tls\fR
|
|
Use the system TLS library instead of rustls (if enabled at compile time).
|
|
.TP 4
|
|
\fB\-\-https\fR
|
|
Make HTTPS requests if not specified in the URL.
|
|
.TP 4
|
|
\fB\-\-http\-version\fR=\fIVERSION\fR
|
|
HTTP version to use.
|
|
|
|
[possible values: 1.0, 1.1, 2, 2\-prior\-knowledge]
|
|
.TP 4
|
|
\fB\-\-resolve\fR=\fIHOST:ADDRESS\fR
|
|
Override DNS resolution for specific domain to a custom IP.
|
|
|
|
You can override multiple domains by repeating this option.
|
|
|
|
Example: \-\-resolve=example.com:127.0.0.1.
|
|
.TP 4
|
|
\fB\-\-interface\fR=\fINAME\fR
|
|
Bind to a network interface or local IP address.
|
|
|
|
Example: \-\-interface=eth0 \-\-interface=192.168.0.2.
|
|
.TP 4
|
|
\fB\-4\fR, \fB\-\-ipv4\fR
|
|
Resolve hostname to ipv4 addresses only.
|
|
.TP 4
|
|
\fB\-6\fR, \fB\-\-ipv6\fR
|
|
Resolve hostname to ipv6 addresses only.
|
|
.TP 4
|
|
\fB\-I\fR, \fB\-\-ignore\-stdin\fR
|
|
Do not attempt to read stdin.
|
|
|
|
This disables the default behaviour of reading the request body from stdin when a redirected input is detected.
|
|
|
|
It is recommended to pass this flag when using xh for scripting purposes. For more information, refer to https://httpie.io/docs/cli/best\-practices.
|
|
.TP 4
|
|
\fB\-\-curl\fR
|
|
Print a translation to a curl command.
|
|
|
|
For translating the other way, try https://curl2httpie.online/.
|
|
.TP 4
|
|
\fB\-\-curl\-long\fR
|
|
Use the long versions of curl's flags.
|
|
.TP 4
|
|
\fB\-\-generate\fR=\fIKIND\fR
|
|
Generate shell completions or man pages. Possible values are:
|
|
|
|
complete\-bash
|
|
complete\-elvish
|
|
complete\-fish
|
|
complete\-nushell
|
|
complete\-powershell
|
|
complete\-zsh
|
|
man
|
|
|
|
Example: xh \-\-generate=complete\-bash > xh.bash.
|
|
.TP 4
|
|
\fB\-\-help\fR
|
|
Print help.
|
|
.TP 4
|
|
\fB\-V\fR, \fB\-\-version\fR
|
|
Print version.
|
|
|
|
.SH EXIT STATUS
|
|
.TP 4
|
|
.B 0
|
|
Successful program execution.
|
|
.TP
|
|
.B 1
|
|
Usage, syntax or network error.
|
|
.TP
|
|
.B 2
|
|
Request timeout.
|
|
.TP
|
|
.B 3
|
|
Unexpected HTTP 3xx Redirection.
|
|
.TP
|
|
.B 4
|
|
HTTP 4xx Client Error.
|
|
.TP
|
|
.B 5
|
|
HTTP 5xx Server Error.
|
|
.TP
|
|
.B 6
|
|
Too many redirects.
|
|
|
|
.SH ENVIRONMENT
|
|
.TP 4
|
|
.B XH_CONFIG_DIR
|
|
Specifies where to look for config.json and named session data.
|
|
The default is ~/.config/xh for Linux/macOS and %APPDATA%\\xh for Windows.
|
|
.TP
|
|
.B XH_HTTPIE_COMPAT_MODE
|
|
Enables the HTTPie Compatibility Mode. The only current difference is that
|
|
\-\-check-status is not enabled by default. An alternative to setting this
|
|
environment variable is to rename the binary to either http or https.
|
|
.TP
|
|
.BR REQUESTS_CA_BUNDLE ", " CURL_CA_BUNDLE
|
|
Sets a custom CA bundle path.
|
|
.TP
|
|
.BR http_proxy "=[protocol://]<host>[:port]"
|
|
Sets the proxy server to use for HTTP.
|
|
.TP
|
|
.BR HTTPS_PROXY "=[protocol://]<host>[:port]"
|
|
Sets the proxy server to use for HTTPS.
|
|
.TP
|
|
.B NO_PROXY
|
|
List of comma-separated hosts for which to ignore the other proxy environment
|
|
variables. "*" matches all host names.
|
|
.TP
|
|
.B NETRC
|
|
Location of the .netrc file.
|
|
.TP
|
|
.B NO_COLOR
|
|
Disables output coloring. See <https://no-color.org>
|
|
.TP
|
|
.B RUST_LOG
|
|
Configure low-level debug messages. See <https://docs.rs/env_logger/0.11.3/env_logger/#enabling-logging>
|
|
|
|
.SH FILES
|
|
.TP 4
|
|
.I ~/.config/xh/config.json
|
|
xh configuration file. The only configurable option is "default_options"
|
|
which is a list of default shell arguments that gets passed to xh.
|
|
Example:
|
|
|
|
.RS
|
|
{ "default_options": ["--native-tls", "--style=solarized"] }
|
|
.RE
|
|
.TP
|
|
.IR ~/.netrc ", " ~/_netrc
|
|
Auto-login information file.
|
|
.TP
|
|
.I ~/.config/xh/sessions
|
|
Session data directory grouped by domain and port number.
|
|
|
|
.SH EXAMPLES
|
|
.TP 4
|
|
\fBxh\fR \fIhttpbin.org/json\fR
|
|
Send a GET request.
|
|
.TP
|
|
\fBxh\fR \fIhttpbin.org/post name=ahmed \fIage:=24\fR
|
|
Send a POST request with body {"name": "ahmed", "age": 24}.
|
|
.TP
|
|
\fBxh\fR get \fIhttpbin.org/json id==5 sort==true\fR
|
|
Send a GET request to http://httpbin.org/json?id=5&sort=true.
|
|
.TP
|
|
\fBxh\fR get \fIhttpbin.org/json x-api-key:12345\fR
|
|
Send a GET request and include a header named X-Api-Key with value 12345.
|
|
.TP
|
|
echo "[1, 2, 3]" | \fBxh\fR post \fIhttpbin.org/post
|
|
Send a POST request with body read from stdin.
|
|
.TP
|
|
\fBxh\fR put \fIhttpbin.org/put id:=49 age:=25\fR | less
|
|
Send a PUT request and pipe the result to less.
|
|
.TP
|
|
\fBxh\fR -d \fIhttpbin.org/json\fR -o \fIres.json\fR
|
|
Download and save to res.json.
|
|
.TP
|
|
\fBxh\fR \fIhttpbin.org/get user-agent:foobar\fR
|
|
Make a request with a custom user agent.
|
|
.TP
|
|
\fBxhs\fR \fIexample.com\fR
|
|
Make an HTTPS request to https://example.com.
|
|
|
|
.SH REPORTING BUGS
|
|
xh's Github issues <https://github.com/ducaale/xh/issues>
|
|
|
|
.SH SEE ALSO
|
|
\fBcurl\fR(1), \fBhttp\fR(1)
|
|
|
|
HTTPie's online documentation <https://httpie.io/docs/cli>
|