fetch is a modern, high-level HTTP(S) client for the command line.
- Response formatting: automatically formats and colors output for supported types (json, xml, etc.)
- Image rendering: render images directly in your terminal
- Compression: automatic gzip response body decompression
- Authentication: support for Basic Auth, Bearer Token, and AWS Signature V4
- Form body: send multipart or urlencoded form bodies
- Editor integration: use an editor to modify the request body
- Configuration: global and per-host configuration
- and more!
You can install fetch using an installation script, by compiling from source,
or from pre-built binaries.
For macOS or Linux, download and run the install.sh script:
curl -fsSL https://raw.githubusercontent.com/ryanfowler/fetch/main/install.sh | bashEnsure you have Go installed, then run:
go install github.com/ryanfowler/fetch@latestVisit the GitHub releases page to download the binary for your operating system.
Once installed, you can update the fetch binary in-place by running:
fetch --updateOr you can let the application auto-update by including the following setting in your configuration file:
auto-update = trueTo make a GET request to a URL and print the status code to stderr and the response body to stdout:
fetch example.comHTTP/1.1 200 OK
{
"name": "example",
"value": 42
}
AWS Signature V4: --aws-sigv4 REGION/SERVICE
Sign the request using AWS Signature V4.
Requires: AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables to be set.
fetch --aws-sigv4 us-east-1/s3 example.comBasic Authentication: --basic USER:PASS
Enable HTTP Basic Authentication.
fetch --basic username:password example.comBearer Token: --bearer TOKEN
Enable HTTP Bearer Token Authentication.
fetch --bearer mysecrettoken example.comBody options generally take values in the format: [@]VALUE
- a value without a prefix of
@is sent directly. - a value prefixed with
@sends a file at the given path. - a value of
@-sends the data read from stdin.
Raw Request Body: -d, --data [@]VALUE
Send a raw request body data.
fetch -d 'Hello, world!' -m PUT example.comJSON Request Body: -j, --json [@]VALUE
Sends a JSON request body.
fetch -j '{"hello":"world"}' -m PUT example.comXML Request Body: -x, --xml [@]XML
Sends an XML request body.
fetch -x `<Tag>value</Tag>` -m PUT example.comURL-Encoded Form Body: -f, --form KEY=VALUE
Send a URL-encoded form body.
fetch -f hello=world -m PUT example.comMultipart Form Body: -F, --multipart KEY=[@]VALUE
Send a multipart form body.
fetch -F hello=world -F data=@/path/to/file.txt -m PUT example.comEditor Integration: -e, --edit
Edit the request body with an editor before sending. An editor is chosen using
the VISUAL or EDITOR environment variables, falling back to a group of
well-known editors.
fetch --edit -m PUT example.comOutput To File: -o, --output PATH
Write the response body to the specified file. If a file with the same path already exists, it will be truncated. If the file does not already exist, it will be created.
fetch -o /path/to/file.txt example.com/file.txtColored Output: --color OPTION
Set whether output should be colored or not.
By default, fetch automatically determines if color should be used.
Must be one of: auto, off, or on.
fetch --color off example.comFormatted Output: --format OPTION
Set whether output should be formatted or not.
By default, fetch automatically determines if output should be formatted.
Must be one of: auto, off, or on.
fetch --format off example.comImage Rendering: --image OPTION
Set how images should be rendered to the terminal.
By default, fetch automatically attempts to decode the image and render it with the optimal image protocol.
Setting the value to native disables the fallback to search the local machine for a tool that can decode the image.
fetch natively supports the jpeg, png, tiff, and webp formats.
Must be one of: auto, native, or off.
fetch --image native example.comVerbosity: -v, --verbose
Increase verbosity of the output to stderr; use multiple times for extra verbosity.
One -v outputs response headers. Two -vs outputs request headers as well.
fetch -vv example.comSilent: -s, --silent
Supress verbose output; takes precedence over the verbose flag. Only warnings and errors will be written to stderr.
fetch -s example.comDisable Pager Usage: --no-pager
Disable piping output to a pager.
fetch --no-pager example.comMethod: -m, -X, --method METHOD
Specify the HTTP method to use.
fetch -m POST example.comHeaders: -H, --header NAME:VALUE
Set custom headers on the request.
fetch -H x-custom-header:value example.comQuery Parameters: -q, --query KEY=VALUE
Append query parameters to the URL.
fetch -q hello=world example.comRange Requests: -r, --range RANGE
Set the Range request header. Can be specified multiple times for multiple ranges.
fetch -r 0-1023 example.comMaximum Allowed Redirects: --redirects NUM
Set the maximum allowed automatic redirects. Use 0 to disable redirects.
fetch --redirects=0 example.comTimeout: --timeout SECONDS
Set a timeout for the entire request in seconds.
fetch --timeout 2.5 example.comCustom DNS Server: --dns-server IP[:PORT]|URL
Use a custom DNS server, either the IP (and optional port) of a UDP server, or the HTTPS URL of a DNS-over-HTTPS server.
fetch --dns-server https://1.1.1.1/dns-query example.comProxy: --proxy PROXY
Route the request through the specified proxy.
fetch --proxy http://localhost:8000 example.comInsecure TLS: --insecure
Allow for invalid TLS certificates from the server.
fetch --insecure example.comDisable Automatic Decompression: --no-encode
Disable automatically requesting and decompressing gzip response bodies.
fetch --no-encode example.comfetch can be configured using a file with an ini-like format. It searches for
a config file in the following order:
- the file location specified with the
-cor--configflag - on Windows at
%AppData%\fetch\config - on Unix-like systems at
$XDG_CONFIG_HOME/fetch/configor$HOME/.config/fetch/config
Settings can be applied globally, or to specific hosts. The order of precedence for options are:
- CLI flags
- domain-specific configuration
- global configuration
An example of the configuration options are:
# Global settings
# Enable or disable auto-update or set the minimum interval to check for updates.
# The value can either be a boolean, or a sepcific interval (e.g. '4h').
# By default, auto-updating is disabled.
auto-update = true
# Enable or disable colored output. Value must be one of "auto", "off", or "on".
# By default, color is set to "auto".
color = off
# Use a custom DNS server. Value must be either an IP (with an optional port),
# or an HTTPS url to use DNS-over-HTTPS.
dns-server = 1.1.1.1:53
# Enable or disable formatted output. Value must be one of "auto", "off", or "on".
# By default, format is set to "auto".
format = on
# Set a header on the HTTP request. Must be in the format "name: value".
header = x-custom-header: value
header = x-another-header: another_value
# Specify the highest allowed HTTP version for the request. Must be one of "1" or "2".
# By default, HTTP is set to 2.
http = 1
# Don't determine exit code from the HTTP status (will always exit with 0).
# By default, 4xx or 5xx statuses result in non-zero exit codes.
ignore-status = true
# Enable or disable image rendering. Value must be one of "auto", "native", or "off".
# By default, image is set to "auto".
image = native
# Accept invalid TLS certificates (DANGER).
insecure = true
# Enable or disable automatically compressing response body.
# By default, compression via gzip is enabled.
no-encode = true
# Enable or disable piping the response body through a pager like "less".
# By default, a pager will be used if available on your system.
no-pager = true
# Specify a proxy url to use for the request.
proxy = http://localhost:8000
# Append query parameters to the HTTP request. Must be in the format "key=value".
query = key=value
query = num=42
# Specify the allowed number of automatic redirects.
redirects = 0
# Disable printing informational data to stderr.
silent = true
# Specify a timeout for the HTTP request. Must be an interval string.
timeout = 30s
# Specify the minimum allowed TLS version to use. Must be in the range "1.0" - "1.3".
tls = 1.3
# Specify the verbosity level. Must be 0 or greater.
verbosity = 2
# Domain-specific settings that take precedence over global options.
[example.com]
header = x-my-header: my_value
timeout = 10sfetch is released under the MIT License.
