hurl(1)
π hurl(1) Β· Hurl Manual π
πΈ NAME πΈ
hurl β run and test HTTP requests.
π¦ SYNOPSIS π¦
hurl [OPTIONS] [FILES...]
hurl --test [OPTIONS] [FILES...]
β¨ DESCRIPTION β¨
okay so Hurl is a command line tool that runs HTTP requests defined in a simple plain text format.
It can chain requests, capture values, and evaluate queries on headers and body response. Hurl is super versatile β it can fetch data and test HTTP sessions: HTML content, REST / SOAP / GraphQL APIs, or any other XML / JSON based APIs. slay.
$ hurl session.hurl
If no input files are specified, input is read from stdin.
$ echo GET http://httpbin.org/get | hurl
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip",
"Content-Length": "0",
"Host": "httpbin.org",
"User-Agent": "hurl/0.99.10",
"X-Amzn-Trace-Id": "Root=1-5eedf4c7-520814d64e2f9249ea44e0"
},
"origin": "1.2.3.4",
"url": "http://httpbin.org/get"
}
Hurl can take files as input, or directories. In the latter case, Hurl will search files with .hurl extension recursively.
Output goes to stdout by default. To have output go to a file, use the -o, --output option:
$ hurl -o output input.hurl
By default, Hurl executes all HTTP requests and outputs the response body of the last HTTP call.
To have a test oriented output, you can use --test option:
$ hurl --test *.hurl
π HURL FILE FORMAT π
The Hurl file format is fully documented in https://hurl.dev/docs/hurl-file.html.
It consists of one or several HTTP requests:
GET http://example.org/endpoint1
GET http://example.org/endpoint2
π Capturing values π
A value from an HTTP response can be re-used for successive HTTP requests.
A typical example occurs with CSRF tokens.
GET https://example.org
HTTP 200
# Capture the CSRF token value from html body.
[Captures]
csrf_token: xpath "normalize-
space(//meta[@name='_csrf_token']/@content)"
# Do the login !
POST https://example.org/login?user=toto&password=1234
X-CSRF-TOKEN: {{csrf_token}}
More information on captures can be found here https://hurl.dev/docs/capturing-response.html.
π Asserts π
The HTTP responses defined in the Hurl file are what Hurl uses to make asserts. Responses are optional.
At the minimum, a response includes an assert on the HTTP status code:
GET http://example.org
HTTP 301
It can also include asserts on the response headers:
GET http://example.org
HTTP 301
Location: http://www.example.org
Explicit asserts can be included by combining a query and a predicate:
GET http://example.org
HTTP 301
[Asserts]
xpath "string(//title)" == "301 Moved"
With the addition of asserts, Hurl can be used as a testing tool to run scenarios.
More information on asserts can be found here https://hurl.dev/docs/asserting-response.html.
π CONFIGURATION π
Options that exist in curl have exactly the same semantics.
Options specified on the command line are defined for every Hurl fileβs entry, except if they are tagged as cli-only (can not be defined in the Hurl request [Options] entry).
For instance:
$ hurl --location foo.hurl
will follow redirection for each entry in foo.hurl. You can also define an option only for a particular entry with an [Options] section. For instance, this Hurl file:
GET https://example.org
HTTP 301
GET https://example.org
[Options]
location: true
HTTP 200
will follow a redirection only for the second entry.
Hurl also looks for a configuration file at these spots: $XDG_CONFIG_HOME/hurl/config if $XDG_CONFIG_HOME exists, or $HOME/.config/hurl/config. The configuration file is a list of options added to each Hurl run.
$ cat ~/.config/hurl/config
# Hurl config file
--header x-identifier:quux
--verbose
--delay=1s
--fail-with-body
Most of the options can also be defined with environment variables (like HURL_INSECURE for --insecure). So, in order to configure Hurl, there are four sources from the lowest priority to highest (overrides all others):
- Configuration file (ex:
~/.config/hurl/config) - Environment variables (ex:
export HURL_INSECURE=true) - Command-line options (ex:
hurl --insecure) - Options section options (ex:
insecure: truein file)
π ALL OPTIONS π
π₯ HTTP options π₯
--aws-sigv4 <PROVIDER1[:PROVIDER2[:REGION[:SERVICE]]]>β Generate anAuthorizationheader with an AWS SigV4 signature. Use-u, --userto specify Access Key Id (username) and Secret Key (password). To use temporary session credentials (e.g. for an AWS IAM Role), add theX-Amz-Security-Tokenheader containing the session token.--cacert <FILE>β Specifies the certificate file for peer verification. The file may contain multiple CA certificates and must be in PEM format. Normally Hurl is built to use a default file for this, so this option is typically used to alter that default file.-E, --cert <CERTIFICATE[:PASSWORD]>β Client certificate file and password. See also--key.--compressedβ Request a compressed response using one of the algorithmsbr,gzip,deflateand automatically decompress the content. Environment variables:HURL_COMPRESSED.--connect-timeout <SECONDS>β Maximum time in seconds that you allow Hurlβs connection to take. You can specify time units in the connect timeout expression. Set Hurl to use a connect timeout of 20 seconds with--connect-timeout 20sor set it to 35,000 milliseconds with--connect-timeout 35000ms. No spaces allowed. See also-m, --max-time. Environment variables:HURL_CONNECT_TIMEOUT.--connect-to <HOST1:PORT1:HOST2:PORT2>β For a request to the givenHOST1:PORT1pair, connect toHOST2:PORT2instead. This option can be used several times in a command line. See also--resolve.--digestβ Tell Hurl to use HTTP Digest authentication.-H, --header <NAME:VALUE>β Add an extra header to include in information sent. Can be used several times in a command. Do not add newlines or carriage returns. Environment variables:HURL_HEADER='name1:value1|name2:value2'(headers are separated by|).-0, --http1.0β Tells Hurl to use HTTP version 1.0 instead of using its internally preferred HTTP version. Environment variables:HURL_HTTP10.--http1.1β Tells Hurl to use HTTP version 1.1. Environment variables:HURL_HTTP11.--http2β Tells Hurl to use HTTP version 2. For HTTPS, this means Hurl negotiates HTTP/2 in the TLS handshake. Hurl does this by default. For HTTP, this means Hurl attempts to upgrade the request to HTTP/2 using theUpgrade:request header. Environment variables:HURL_HTTP2.--http2-prior-knowledgeβ Tells Hurl to issue a non-TLS HTTP request using HTTP/2 directly without HTTP/1.1 Upgrade. It requires prior knowledge that the server supports HTTP/2 straight away. HTTPS requests still do HTTP/2 the standard way with negotiated protocol versions in the TLS handshake. Environment variables:HURL_HTTP2_PRIOR_KNOWLEDGE.--http3β Tells Hurl to try HTTP version 3 to the host in the URL, but fallback to earlier HTTP versions if the HTTP/3 connection establishment fails. HTTP/3 is only available for HTTPS and not for HTTP URLs. Environment variables:HURL_HTTP3.-k, --insecureβ This option explicitly allows Hurl to perform "insecure" SSL connections and transfers. Environment variables:HURL_INSECURE.-4, --ipv4β This option tells Hurl to use IPv4 addresses only when resolving host names, and not for example try IPv6. Environment variables:HURL_IPV4.-6, --ipv6β This option tells Hurl to use IPv6 addresses only when resolving host names, and not for example try IPv4. Environment variables:HURL_IPV6.--key <KEY>β Private key file name.--limit-rate <SPEED>β Specify the maximum transfer rate you want Hurl to use, for both downloads and uploads. This feature is useful if you have a limited pipe and you would like your transfer not to use your entire bandwidth. To make it slower than it otherwise would be. The given speed is measured in bytes/second. Environment variables:HURL_LIMIT_RATE.-L, --locationβ Follow redirect. To limit the amount of redirects to follow use the--max-redirsoption. Environment variables:HURL_LOCATION.--location-trustedβ Like-L, --location, but allows sending the name + password to all hosts that the site may redirect to. This may or may not introduce a security breach if the site redirects you to a site to which you send your authentication info (which is plaintext in the case of HTTP Basic authentication). Environment variables:HURL_LOCATION_TRUSTED.--max-filesize <BYTES>β Specify the maximum size in bytes of a file to download. If the file requested is larger than this value, the transfer does not start. Environment variables:HURL_MAX_FILESIZE. This is a cli-only option.--max-redirs <NUM>β Set maximum number of redirection-followings allowed. By default, the limit is set to 50 redirections. Set this option to -1 to make it unlimited. Environment variables:HURL_MAX_REDIRS.-m, --max-time <SECONDS>β Maximum time in seconds that you allow a request/response to take. This is the standard timeout. You can specify time units in the maximum time expression. Set Hurl to use a maximum time of 20 seconds with--max-time 20sor set it to 35,000 milliseconds with--max-time 35000ms. No spaces allowed. See also--connect-timeout. Environment variables:HURL_MAX_TIME.--negotiateβ Tell Hurl to use Negotiate (SPNEGO) authentication.--no-cookie-storeβ the page gives no description for this one, so weβre not inventing anything π.--no-cookie-storeβ bestie, this one says no cookies for you πͺπ ββοΈ. It kills cookie storage for the requests/responses inside a file. By default, all the requests in the same Hurl file share cookie storage β this option deactivates the cookie engine entirely.
Environment variables: HURL_NO_COOKIE_STORE
This is a cli-only option.
--no-header <NAME>β yeets a header out of the info being sent ποΈ. You can stack it, use it several times in one command, no problem.
Environment variables: HURL_NO_HEADER='name1|name2' (the names are separated by |)
--no-proxy <HOST(S)>β a comma-separated list of hosts that do not go through a proxy π«.
Environment variables: no_proxy
This is a cli-only option.
--ntlmβ tells Hurl to use NTLM authentication π.--path-as-isβ tells Hurl to not mess with sequences of/../or/./in the given URL path. Normally Hurl squashes or merges them according to standards, but with this option you're literally telling it to leave them alone π.--pinnedpubkey <HASHES>β okay so when negotiating a TLS or SSL connection, the server sends a certificate saying "this is me πββοΈ". A public key gets extracted from that certificate, and if it doesn't exactly match the public key you handed to this option, Hurl aborts the connection before sending or receiving any data. Zero data exchanged, periodt π₯.-x,--proxy <[PROTOCOL://]HOST[:PORT]>β use the specified proxy π°οΈ.
Environment variables: http_proxy https_proxy all_proxy
--proxy-header <HEADER>β an extra header to include in the request when it's being sent to a proxy π. These headers are only applied when a proxy is involved; if Hurl connects directly to the target server, they're ignored. Rude but true.
Environment variables: HURL_PROXY_HEADER='name1:value1|name2:value2' (headers are separated by |)
This is a cli-only option.
--resolve <HOST:PORT:ADDR>β gives you a custom address for a specific host + port pair π . Using this, you can make the Hurl request(s) use the address you picked and stop the normally-resolved address from being used. Think of it as a little/etc/hostsalternative right there on the command line, iykyk.--ssl-no-revokeβ (Windows πͺ) this tells Hurl to disable certificate revocation checks.
β οΈ WARNING: this option loosens the SSL security, and by using this flag you are asking for exactly that. No cap, it's less safe.
This is a cli-only option.
--tls-max <VERSION>β sets the maximum allowed TLS version π§. If the connection is done without TLS, this option has no effect β and yes, that includes QUIC-using (HTTP/3) transfers.defaultβ Use up to the recommended TLS version.1.0β Use up to TLSv1.0.1.1β Use up to TLSv1.1.1.2β Use up to TLSv1.2.1.3β Use up to TLSv1.3.
Environment variables: HURL_TLS_MAX
--tls-min <VERSION>β sets the minimum allowed TLS version πΈ. Same deal β if the connection is done without TLS, this option has no effect, and that includes QUIC-using (HTTP/3) transfers.defaultβ Use down to the recommended TLS version.1.0β Use down to TLSv1.0.1.1β Use down to TLSv1.1.1.2β Use down to TLSv1.2.1.3β Use down to TLSv1.3.
Environment variables: HURL_TLS_MIN
--unix-socket <PATH>β (HTTP) connect through this Unix domain socket instead of using the network π.-u,--user <USER:PASSWORD>β adds a basic Authentication header to each request π.
Environment variables: HURL_USER
-A,--user-agent <NAME>β specifies the User-Agent string to send to the HTTP server π΅οΈββοΈ.
Environment variables: HURL_USER_AGENT
This is a cli-only option.
π Output options π
--colorβ colorizes standard output and standard error π.
By default, Hurl outputs a prettified and colorized response. But when redirected through pipes, the standard streams are not colorized β so this option forces the color back on. Slay.
Environment variables: HURL_COLOR
This is a cli-only option.
--curl <FILE>β exports each request to a list ofcurlcommands π. Iconic for when you need to hand a repro to someone.
This is a cli-only option.
--error-format <FORMAT>β controls the format of the error message (shortby default, orlong) π. When usinglong, the response body is logged whenever there are errors.
Environment variables: HURL_ERROR_FORMAT
This is a cli-only option.
--fail-with-bodyβ outputs the body response on standard output if there are any errors π. By default, Hurl only outputs the last body response on standard output when a run is successful. So likeβ¦ this is the "show me the damage anyway" button.
Environment variables: HURL_FAIL_WITH_BODY
-i,--includeβ includes the HTTP headers in the output π.
This is a cli-only option.
--jsonβ outputs each Hurl file result to JSON β¨. The format is very close to HAR format.
This is a cli-only option.
--no-colorβ do not colorize standard output nor standard error π«π.
Environment variables: HURL_NO_COLOR NO_COLOR
This is a cli-only option.
--no-outputβ suppresses output entirely π€. By default, Hurl outputs the body of the last response.
Environment variables: HURL_NO_OUTPUT
This is a cli-only option.
--no-prettyβ do not prettify response output for supported content types (JSON only for the moment π). By default, output is prettified if standard output is a terminal.
Environment variables: HURL_NO_PRETTY
This is a cli-only option.
-o,--output <FILE>β writes output to FILE instead of stdout π. Use'-'for stdout in[Options]sections.--prettyβ prettifies response output for supported content types (JSON only for the moment π). By default, a JSON response is prettified if standard output is a terminal, and colorized β see--no-colorto format without color.
Environment variables: HURL_PRETTY
This is a cli-only option.
--progress-barβ displays a progress bar in test mode π. The progress bar is displayed only in interactive TTYs, and this option forces it to show up even in non-interactive TTYs.
This is a cli-only option.
-v,--verboseβ turns on verbose output on the standard error stream π£οΈ. Super useful for debugging.
A line starting with '>' means data sent by Hurl. A line starting with '<' means data received by Hurl. A line starting with '*' means additional info provided by Hurl.
If you only want HTTP headers in the output, -i, --include might be the option you're looking for π.
Environment variables: HURL_VERBOSE
--verbosity <LEVEL>β sets the verbosity level for debug logs on the standard error stream (brief,verboseordebug) π.
If you only want HTTP headers in the output, -i, --include might be the option you're looking for. -v, --verbose is an alias for --verbosity verbose, and --very-verbose is an alias for --verbosity debug.
Environment variables: HURL_VERBOSITY
--very-verboseβ turns on more verbose output on the standard error stream π«£.
In contrast to the --verbose option, this option outputs the full HTTP body request and response on standard error. In addition, lines starting with '**' are libcurl debug logs. It's giving maximal chaos and I love it.
Environment variables: HURL_VERY_VERBOSE
π Run options π
--continue-on-errorβ keeps executing requests all the way to the end of the Hurl file even when an assert error occurs πββοΈπ¨. By default, Hurl exits after an assert error in the HTTP response.
Note that this option does not affect the behavior with multiple input Hurl files π.
All the input files are executed independently. The result of one file does not affect the execution of the other Hurl files.
Environment variables: HURL_CONTINUE_ON_ERROR
This is a cli-only option.
--delay <MILLISECONDS>β sets a delay before each request (aka sleep π΄). The delay is not applied to requests that have been retried because of--retryβ see--retry-intervalto space out retried requests.
You can specify time units in the delay expression, bestie β¨. Set Hurl to use a delay of 2 seconds with --delay 2s or set it to 500 milliseconds with --delay 500ms. Supported time units: ms, s, m, h. No spaces allowed π«.
Environment variables: HURL_DELAY
--from-entry <ENTRY_NUMBER>β executes the Hurl file starting from ENTRY_NUMBER (counting starts at1) π’.
This is a cli-only option.
--jobs <NUM>β the maximum number of parallel jobs in parallel mode π§βπ€βπ§. The default value corresponds (in most cases) to the current amount of CPUs. Set it to1to disable parallel execution of files.
See also --parallel.
Environment variables: HURL_JOBS
This is a cli-only option.
--no-assertβ ignores all the asserts defined in the Hurl file π. Like, all of them. Zero checks, zero notes.
Environment variables: HURL_NO_ASSERT
This is a cli-only option.
--no-jsonpath-coercionβ disables JSONPath result coercion πͺ.
By default, when JSONPath coercion is enabled, empty JSONPath results are returned as no value and single JSONPath results are returned as a scalar value. With this option, JSONPath results are always returned as arrays. Consistency queen.
Environment variables: HURL_NO_JSONPATH_COERCION
--parallelβ runs files in parallel ποΈπ¨.
Each Hurl file is executed in its own worker thread, without sharing anything with the other workers. The default run mode is sequential. Parallel execution is the default in --test mode.
See also --jobs.
This is a cli-only option.
--repeat <NUM>β repeats the input files sequence NUM times, and-1for an infinite loop βΎοΈ. Givena.hurl,b.hurl,c.hurlas input, repeat two times will runa.hurl,b.hurl,c.hurl,a.hurl,b.hurl,c.hurl.--retry <NUM>β maximum number of retries,0for no retries,-1for unlimited retries π. A retry happens if any error occurs (asserts, captures, runtimes, etcβ¦).
Environment variables: HURL_RETRY
--retry-interval <MILLISECONDS>β duration in milliseconds between each retry β±οΈ. The default is1000ms.
You can specify time units in the retry interval expression too πΈ. Set Hurl to use a retry interval of 2 seconds with --retry-interval 2s or set it to 500 milliseconds with --retry-interval 500ms. No spaces allowed π«.
- Environment variables:
HURL_RETRY_INTERVAL --secret <NAME=VALUE>β defines a secret value that gets redacted from logs and reports π΅οΈββοΈ once it's defined, you can use that secret as a variable literally everywhere variables are allowed. so iconic.- Environment variables:
HURL_SECRET_name - cli-only option, no cap π
- Environment variables:
--secrets-file <FILE>β points to a secrets file where you define all your secrets at once π each secret is written asname=value, exactly like you'd do with--secret.- heads up bestie: defining the same secret twice throws an error π
- cli-only option β¨
--testβ turns on test mode π§ͺ and here's what changes: the HTTP response is not outputted anymore, progress gets reported for each Hurl file tested, and a text summary pops up once all files have run. very demure, very testy.- in test mode, files run in parallel β‘ want it sequential? use
--jobs 1. - See also
--jobs. - Environment variables:
HURL_TEST - cli-only option πΈ
- in test mode, files run in parallel β‘ want it sequential? use
--to-entry <ENTRY_NUMBER>β runs the Hurl file up to ENTRY_NUMBER (counting starts at1π₯Ί) and ignores the rest of the file. perfect for debugging a session, lowkey a lifesaver.- cli-only option π₯
--variable <NAME=VALUE>β defines a variable (name/value) for use in Hurl templates β¨- Environment variables:
HURL_VARIABLE_name
- Environment variables:
--variables-file <FILE>β sets a properties file where you define your variables π each one is written asname=value, exactly like with--variable.- note: defining the same variable twice produces an error π
- cli-only option π
π Report options π
--report-html <DIR>β generates an HTML report in DIR π if the HTML report already exists, it gets updated with the new test results. no deleting, just vibes.- cli-only option β¨
--report-json <DIR>β generates a JSON report in DIR π¦ if the JSON report already exists, it gets updated with the new test results.- cli-only option β¨
--report-junit <FILE>β generates a JUnit file π if the FILE report already exists, it gets updated with the new test results.- cli-only option β¨
--report-tap <FILE>β generates a TAP report π if the FILE report already exists, it gets updated with the new test results.- cli-only option β¨
π Other options π
-b,--cookie <FILE>β reads cookies from FILE (Netscape cookie file format, the classic πͺ). combine it with-c,--cookie-jarand you can simulate a whole cookie storage between successive Hurl runs. main character cookie behaviour.- cli-only option π
-c,--cookie-jar <FILE>β writes cookies to FILE after the session runs, using the Netscape cookie file format πͺ combine it with-b,--cookieand you can simulate a cookie storage between successive Hurl runs.- cli-only option π
--file-root <DIR>β sets the root directory for importing files in Hurl π this covers files in multipart form data, request body and response output. if you don't define it explicitly, files are relative to the Hurl file's directory.- cli-only option πΈ
--glob <GLOB>β specifies input files matching the given glob pattern β¨ multiple glob flags are allowed. it supports common Unix glob patterns like*,?and[].
β οΈ real talk: so your shell doesn't expand glob patterns before Hurl gets to handle them, you must wrap each pattern in single quotes or double quotes. don't let bash steal your moment π
- cli-only option π¦
-n,--netrcβ scans the.netrcfile in the user's home directory for the username and password π- See also
--netrc-fileand--netrc-optional.
- See also
--netrc-file <FILE>β like--netrc, but you provide the path to the netrc file yourself π«Ά- See also
--netrc-optional.
- See also
--netrc-optionalβ similar to--netrc, but makes the.netrcusage optional π- See also
--netrc-file.
- See also
-h,--helpβ usage help π₯Ί lists all current command line options with a short description.-V,--versionβ prints version information π
π EXIT CODES π
0β success π slay.1β failed to parse command-line options π2β input file parsing error π3β runtime error (such as failure to connect to host) π4β assert error π₯
π WWW π
β SEE ALSO β
and that's the whole page bestie, you ate it π this was hurl 8.1.0, dated 27 Oct 2026 β go be iconic with it πβ¨π¦
π¦ where this page comes from
- arch rolling: hurl 8.1.0-1 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms