Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
XH(1)				 User Commands				 XH(1)

NAME
       xh - Friendly and fast tool for sending HTTP requests

SYNOPSIS
       xh [OPTIONS] [METHOD] URL [--] [REQUEST_ITEM ...]

DESCRIPTION
       xh 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	http(1).

       The  --curl  option  can	 be used to print a curl(1) translation	of the
       command instead of sending a request.

POSITIONAL ARGUMENTS
       [METHOD]
	   The HTTP method to use for the request.

	   This	defaults to GET, or to POST if the request contains a body.

       URL 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	equiv-
	   alent to "localhost:8000", and ":/path" is  equivalent  to  "local-
	   host/path".

       [REQUEST_ITEM ...]
	   Optional key-value pairs to be included in the request.

	   The separator is used to determine the type:

	       key==value
		   Add a query string to the URL.

	       key=value
		   Add	a JSON property	(--json) or form field (--form)	to the
		   request body.

	       key:=value
		   Add a field with a literal JSON value to the	request	body.

		   Example: "numbers:=[1,2,3] enabled:=true"

	       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"

	       @filename
		   Use a file as the request body.

	       header:value
		   Add a header, e.g. "user-agent:foobar"

	       header:
		   Unset a header, e.g.	"connection:"

	       header;
		   Add a header	with an	empty value.

	   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.

OPTIONS
       Each --OPTION can be reset with a --no-OPTION argument.

       -j, --json
	   (default)  Serialize	data items from	the command line as a JSON ob-
	   ject.

	   Overrides both --form and --multipart.

       -f, --form
	   Serialize data items	from the command line as form fields.

	   Overrides both --json and --multipart.

       --multipart
	   Like	--form,	but force a multipart/form-data	request	 even  without
	   files.

	   Overrides both --json and --form.

       --raw=RAW
	   Pass	raw request data without extra processing.

       --pretty=STYLE
	   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.

       --format-options=FORMAT_OPTIONS
	   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.

       -s, --style=THEME
	   Output coloring style.

	   [possible values: auto, solarized, monokai, fruity]

       --response-charset=ENCODING
	   Override the	response encoding for terminal display purposes.

	   Example: --response-charset=latin1.

       --response-mime=MIME_TYPE
	   Override the	response mime type for coloring	and formatting for the
	   terminal.

	   Example: --response-mime=application/json.

       -p, --print=FORMAT
	   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.

       -h, --headers
	   Print only the response headers. Shortcut for --print=h.

       -b, --body
	   Print only the response body. Shortcut for --print=b.

       -m, --meta
	   Print only the response metadata. Shortcut for --print=m.

       -v, --verbose
	   Print the whole request as well as the response.

	   Additionally, this enables  --all  for  printing  intermediary  re-
	   quests/responses while following redirects.

	   Using  verbose  twice  i.e. -vv will	print the response metadata as
	   well.

	   Equivalent to --print=HhBb --all.

       --debug
	   Print full error stack traces and debug log messages.

	   Logging can be configured in	more detail using the `$RUST_LOG`  en-
	   vironment  variable.	 Set  `RUST_LOG=trace`	to show	even more mes-
	   sages.    See     https://docs.rs/env_logger/0.11.3/env_logger/#en-
	   abling-logging.

       --all
	   Show	 any intermediary requests/responses while following redirects
	   with	--follow.

       -P, --history-print=FORMAT
	   The same as --print but applies only	to  intermediary  requests/re-
	   sponses.

       -q, --quiet
	   Do not print	to stdout or stderr.

	   Using quiet twice i.e. -qq will suppress warnings as	well.

       -S, --stream
	   Always stream the response body.

       -x, --compress
	   Content compressed (encoded)	with Deflate algorithm.

	   The Content-Encoding	header is set to deflate.

	   Compression is skipped if it	appears	that compression ratio is neg-
	   ative. Compression can be forced by repeating this option.

	   Note:  Compression  cannot  be used if the Content-Encoding request
	   header is present.

       -o, --output=FILE
	   Save	output to FILE instead of stdout.

       -d, --download
	   Download the	body to	a file instead of printing it.

	   The Accept-Encoding header is set to	 identify  and	any  redirects
	   will	be followed.

       -c, --continue
	   Resume an interrupted download. Requires --download and --output.

       --session=FILE
	   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.

       --session-read-only=FILE
	   Create or read a session without updating it	form  the  request/re-
	   sponse exchange.

       -A, --auth-type=AUTH_TYPE
	   Specify the auth mechanism.

	   [possible values: basic, bearer, digest]

       -a, --auth=USER[:PASS] |	TOKEN
	   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.

       --ignore-netrc
	   Do not use credentials from .netrc.

       --offline
	   Construct HTTP requests without sending them	anywhere.

       --check-status
	   (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 Er-
	   ror), or 3 on 3xx (Redirect)	if --follow isn't set.

	   If stdout is	redirected then	a warning is written to	stderr.

       -F, --follow
	   Do follow redirects.

       --max-redirects=NUM
	   Number of redirects to follow. Only respected if --follow is	used.

       --timeout=SEC
	   Connection timeout of the request.

	   The default value is	"0", i.e., there is no timeout limit.

       --proxy=PROTOCOL:URL
	   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.

       --verify=VERIFY
	   If "no", skip SSL verification. If a	file path, use it as a CA bun-
	   dle.

	   Specifying a	CA bundle will disable the system's built-in root cer-
	   tificates.

	   "false" instead of "no" also	works. The default is "yes" ("true").

       --cert=FILE
	   Use a client	side certificate for SSL.

       --cert-key=FILE
	   A private key file to use with --cert.

	   Only	 necessary  if	the  private  key is not contained in the cert
	   file.

       --ssl=VERSION
	   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]

       --native-tls
	   Use the system TLS library instead of rustls	(if enabled at compile
	   time).

       --https
	   Make	HTTPS requests if not specified	in the URL.

       --http-version=VERSION
	   HTTP	version	to use.

	   [possible values: 1.0, 1.1, 2, 2-prior-knowledge]

       --resolve=HOST:ADDRESS
	   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.

       --interface=NAME
	   Bind	to a network interface or local	IP address.

	   Example: --interface=eth0 --interface=192.168.0.2.

       -4, --ipv4
	   Resolve hostname to ipv4 addresses only.

       -6, --ipv6
	   Resolve hostname to ipv6 addresses only.

       -I, --ignore-stdin
	   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.

       --curl
	   Print a translation to a curl command.

	   For translating the other way, try https://curl2httpie.online/.

       --curl-long
	   Use the long	versions of curl's flags.

       --generate=KIND
	   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.

       --help
	   Print help.

       -V, --version
	   Print version.

EXIT STATUS
       0   Successful program execution.

       1   Usage, syntax or network error.

       2   Request timeout.

       3   Unexpected HTTP 3xx Redirection.

       4   HTTP	4xx Client Error.

       5   HTTP	5xx Server Error.

       6   Too many redirects.

ENVIRONMENT
       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.

       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.

       REQUESTS_CA_BUNDLE, CURL_CA_BUNDLE
	   Sets	a custom CA bundle path.

       http_proxy=[protocol://]<host>[:port]
	   Sets	the proxy server to use	for HTTP.

       HTTPS_PROXY=[protocol://]<host>[:port]
	   Sets	the proxy server to use	for HTTPS.

       NO_PROXY
	   List	of comma-separated hosts for which to ignore the  other	 proxy
	   environment variables. "*" matches all host names.

       NETRC
	   Location of the .netrc file.

       NO_COLOR
	   Disables output coloring. See <https://no-color.org>

       RUST_LOG
	   Configure  low-level	 debug messages. See <https://docs.rs/env_log-
	   ger/0.11.3/env_logger/#enabling-logging>

FILES
       ~/.config/xh/config.json
	   xh configuration file. The only configurable	option is "default_op-
	   tions" which	is a list of default shell arguments that gets	passed
	   to xh.  Example:

	   { "default_options":	["--native-tls", "--style=solarized"] }

       ~/.netrc, ~/_netrc
	   Auto-login information file.

       ~/.config/xh/sessions
	   Session data	directory grouped by domain and	port number.

EXAMPLES
       xh httpbin.org/json
	   Send	a GET request.

       xh httpbin.org/post name=ahmed age:=24
	   Send	a POST request with body {"name": "ahmed", "age": 24}.

       xh get httpbin.org/json id==5 sort==true
	   Send	a GET request to http://httpbin.org/json?id=5&sort=true.

       xh get httpbin.org/json x-api-key:12345
	   Send	 a GET request and include a header named X-Api-Key with value
	   12345.

       echo "[1, 2, 3]"	| xh post httpbin.org/post
	   Send	a POST request with body read from stdin.

       xh put httpbin.org/put id:=49 age:=25 | less
	   Send	a PUT request and pipe the result to less.

       xh -d httpbin.org/json -o res.json
	   Download and	save to	res.json.

       xh httpbin.org/get user-agent:foobar
	   Make	a request with a custom	user agent.

       xhs example.com
	   Make	an HTTPS request to https://example.com.

REPORTING BUGS
       xh's Github issues <https://github.com/ducaale/xh/issues>

SEE ALSO
       curl(1),	http(1)

       HTTPie's	online documentation <https://httpie.io/docs/cli>

0.24.0				  2025-02-18				 XH(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=xh&sektion=1&manpath=FreeBSD+Ports+14.3.quarterly>

home | help