2020-08-27 10:07:46 +03:00
## NAME
hurl - run and test HTTP requests.
## SYNOPSIS
**hurl** [options] [FILE...]
## DESCRIPTION
2022-12-19 23:30:08 +03:00
**Hurl** is a command line tool that runs HTTP requests defined in a simple plain text format.
2020-08-27 10:07:46 +03:00
2022-12-19 23:30:08 +03:00
It can chain requests, capture values and evaluate queries on headers and body response. Hurl is very versatile, it can be used for fetching data and testing HTTP sessions: HTML content, REST / SOAP / GraphQL APIs, or any other XML / JSON based APIs.
2022-09-03 01:32:04 +03:00
```shell
2020-10-23 18:30:01 +03:00
$ hurl session.hurl
```
2020-08-27 10:07:46 +03:00
2022-08-16 13:08:14 +03:00
If no input files are specified, input is read from stdin.
2020-08-27 10:07:46 +03:00
2022-09-03 01:32:04 +03:00
```shell
2020-10-23 18:30:01 +03:00
$ echo GET http://httpbin.org/get | hurl
2020-08-27 10:07:46 +03:00
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip",
"Content-Length": "0",
"Host": "httpbin.org",
"User-Agent": "hurl/0.99.10",
2021-02-20 16:17:42 +03:00
"X-Amzn-Trace-Id": "Root=1-5eedf4c7-520814d64e2f9249ea44e0"
2020-08-27 10:07:46 +03:00
},
"origin": "1.2.3.4",
"url": "http://httpbin.org/get"
}
2020-10-23 18:30:01 +03:00
```
2020-08-27 10:07:46 +03:00
2022-09-02 01:11:36 +03:00
Output goes to stdout by default. To have output go to a file, use the [`-o, --output` ](#output ) option:
2020-08-27 10:07:46 +03:00
2022-09-03 01:32:04 +03:00
```shell
2020-10-23 18:30:01 +03:00
$ hurl -o output input.hurl
```
2020-08-27 10:07:46 +03:00
2021-05-28 17:19:29 +03:00
By default, Hurl executes all HTTP requests and outputs the response body of the last HTTP call.
2020-08-27 10:07:46 +03:00
2022-08-16 13:08:14 +03:00
To have a test oriented output, you can use [`--test` ](#test ) option:
2022-06-23 16:20:34 +03:00
2022-09-03 01:32:04 +03:00
```shell
2022-06-23 16:20:34 +03:00
$ hurl --test *.hurl
```
2020-08-27 10:07:46 +03:00
## HURL FILE FORMAT
2022-08-16 13:08:14 +03:00
The Hurl file format is fully documented in [https://hurl.dev/docs/hurl-file.html ](https://hurl.dev/docs/hurl-file.html )
2020-08-27 10:07:46 +03:00
It consists of one or several HTTP requests
2020-10-23 18:30:01 +03:00
```hurl
2022-05-24 16:50:00 +03:00
GET http:/example.org/endpoint1
GET http:/example.org/endpoint2
2020-10-23 18:30:01 +03:00
```
2020-08-27 10:07:46 +03:00
### Capturing values
A value from an HTTP response can be-reused for successive HTTP requests.
2022-12-19 23:30:08 +03:00
A typical example occurs with CSRF tokens.
2020-08-27 10:07:46 +03:00
2020-10-23 18:30:01 +03:00
```hurl
2022-05-24 16:50:00 +03:00
GET https://example.org
2022-12-19 23:30:08 +03:00
HTTP 200
2020-10-23 18:30:01 +03:00
# Capture the CSRF token value from html body.
[Captures]
csrf_token: xpath "normalize-space(//meta[@name='_csrf_token']/@content)"
2020-08-27 10:07:46 +03:00
2020-10-23 18:30:01 +03:00
# Do the login !
2022-05-24 16:50:00 +03:00
POST https://example.org/login?user=toto& password=1234
2020-10-23 18:30:01 +03:00
X-CSRF-TOKEN: {{csrf_token}}
```
2020-08-27 10:07:46 +03:00
2022-09-02 01:11:36 +03:00
More information on captures can be found here [https://hurl.dev/docs/capturing-response.html ](https://hurl.dev/docs/capturing-response.html )
2022-06-23 16:20:34 +03:00
2020-08-27 10:07:46 +03:00
### Asserts
2022-12-19 23:30:08 +03:00
The HTTP response defined in the Hurl file are used to make asserts. Responses are optional.
2020-08-27 10:07:46 +03:00
2022-12-19 23:30:08 +03:00
At the minimum, response includes assert on the HTTP status code.
2020-08-27 10:07:46 +03:00
2020-10-23 18:30:01 +03:00
```hurl
2022-12-19 23:30:08 +03:00
GET http:/example.org
HTTP 301
2020-10-23 18:30:01 +03:00
```
2020-08-27 10:07:46 +03:00
It can also include asserts on the response headers
2020-10-23 18:30:01 +03:00
```hurl
2022-12-19 23:30:08 +03:00
GET http:/example.org
HTTP 301
Location: http://www.example.org
2020-10-23 18:30:01 +03:00
```
2020-08-27 10:07:46 +03:00
2022-09-02 01:11:36 +03:00
Explicit asserts can be included by combining a query and a predicate
2020-08-27 10:07:46 +03:00
2020-10-23 18:30:01 +03:00
```hurl
2022-12-19 23:30:08 +03:00
GET http:/example.org
HTTP 301
2020-10-23 18:30:01 +03:00
[Asserts]
2022-02-15 15:02:52 +03:00
xpath "string(//title)" == "301 Moved"
2020-10-23 18:30:01 +03:00
```
2020-08-27 10:07:46 +03:00
2022-09-02 01:11:36 +03:00
With the addition of asserts, Hurl can be used as a testing tool to run scenarios.
2020-08-27 10:07:46 +03:00
2022-09-02 01:11:36 +03:00
More information on asserts can be found here [https://hurl.dev/docs/asserting-response.html ](https://hurl.dev/docs/asserting-response.html )
2020-08-27 10:07:46 +03:00
## OPTIONS
2022-09-28 11:24:24 +03:00
Options that exist in curl have exactly the same semantics.
2022-08-16 13:08:14 +03:00
Options specified on the command line are defined for every Hurl file's entry.
For instance:
2022-09-03 01:32:04 +03:00
```shell
2022-08-16 13:08:14 +03:00
$ hurl --location foo.hurl
```
2022-09-02 01:11:36 +03:00
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:
2022-08-16 13:08:14 +03:00
```hurl
2022-12-19 23:30:08 +03:00
GET https://example.org
HTTP 301
2022-08-16 13:08:14 +03:00
2022-12-19 23:30:08 +03:00
GET https://example.org
2022-08-16 13:08:14 +03:00
[Options]
location: true
2022-12-19 23:30:08 +03:00
HTTP 200
2022-08-16 13:08:14 +03:00
```
2022-09-02 01:11:36 +03:00
will follow a redirection only for the second entry.
2020-08-27 10:07:46 +03:00
2022-12-19 23:30:08 +03:00
### --cacert <FILE> {#cacert}
2021-10-20 09:05:19 +03:00
2022-09-02 01:11:36 +03:00
Specifies the certificate file for peer verification. The file may contain multiple CA certificates and must be in PEM format.
2022-10-24 21:58:56 +03:00
Normally Hurl is built to use a default file for this, so this option is typically used to alter that default file.
2021-10-20 09:05:19 +03:00
2022-12-19 23:30:08 +03:00
### -E, --cert <CERTIFICATE[:PASSWORD]> {#cert}
Client certificate file and password.
See also [`--key` ](#key ).
2022-02-15 11:48:38 +03:00
### --color {#color}
2023-01-27 13:01:59 +03:00
Colorize debug output (the HTTP response output is not colorized).
2022-02-15 11:48:38 +03:00
2020-10-29 19:16:59 +03:00
### --compressed {#compressed}
2020-10-11 22:13:41 +03:00
Request a compressed response using one of the algorithms br, gzip, deflate and automatically decompress the content.
2022-10-24 21:58:56 +03:00
### --connect-timeout <SECONDS> {#connect-timeout}
2020-09-23 22:27:49 +03:00
2020-10-29 21:29:51 +03:00
Maximum time in seconds that you allow Hurl's connection to take.
2020-09-23 22:27:49 +03:00
2022-12-19 23:30:08 +03:00
See also [`-m, --max-time` ](#max-time ).
### --connect-to <HOST1:PORT1:HOST2:PORT2> {#connect-to}
For a request to the given HOST1:PORT1 pair, connect to HOST2:PORT2 instead. This option can be used several times in a command line.
See also [`--resolve` ](#resolve ).
2020-09-23 22:27:49 +03:00
2022-10-24 21:58:56 +03:00
### -b, --cookie <FILE> {#cookie}
2022-02-15 11:48:38 +03:00
2022-10-24 21:58:56 +03:00
Read cookies from FILE (using the Netscape cookie file format).
2022-02-15 11:48:38 +03:00
2022-08-16 13:08:14 +03:00
Combined with [`-c, --cookie-jar` ](#cookie-jar ), you can simulate a cookie storage between successive Hurl runs.
2022-02-15 11:48:38 +03:00
2022-10-24 21:58:56 +03:00
### -c, --cookie-jar <FILE> {#cookie-jar}
2020-08-27 10:07:46 +03:00
Write cookies to FILE after running the session (only for one session).
The file will be written using the Netscape cookie file format.
2022-08-16 13:08:14 +03:00
Combined with [`-b, --cookie` ](#cookie ), you can simulate a cookie storage between successive Hurl runs.
2020-08-27 10:07:46 +03:00
2023-06-28 17:14:06 +03:00
### --error-format <FORMAT> {#error-format}
Control the format of error message (short by default or long)
2020-08-27 10:07:46 +03:00
### --fail-at-end {#fail-at-end}
Continue executing requests 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.
2020-11-16 10:36:20 +03:00
Note that this option does not affect the behavior with multiple input Hurl files.
2020-08-27 10:07:46 +03:00
2020-11-16 10:36:20 +03:00
All the input files are executed independently. The result of one file does not affect the execution of the other Hurl files.
2020-08-27 10:07:46 +03:00
2022-10-24 21:58:56 +03:00
### --file-root <DIR> {#file-root}
2020-08-27 10:07:46 +03:00
2022-09-25 13:52:24 +03:00
Set root file system to import files in Hurl. This is used for both files in multipart form data and request body.
2020-08-27 10:07:46 +03:00
When this is not explicitly defined, the files are relative to the current directory in which Hurl is running.
2022-02-15 11:48:38 +03:00
### -L, --location {#location}
2022-09-02 01:11:36 +03:00
Follow redirect. To limit the amount of redirects to follow use the [`--max-redirs` ](#max-redirs ) option
2022-02-15 11:48:38 +03:00
2022-10-24 21:58:56 +03:00
### --glob <GLOB> {#glob}
2021-12-04 13:15:46 +03:00
2022-05-24 16:45:25 +03:00
Specify input files that match the given glob pattern.
2021-12-10 00:21:16 +03:00
Multiple glob flags may be used. This flag supports common Unix glob patterns like *, ? and [].
2022-01-14 18:45:22 +03:00
However, to avoid your shell accidentally expanding glob patterns before Hurl handles them, you must use single quotes or double quotes around each pattern.
2021-12-04 13:15:46 +03:00
2022-02-15 11:48:38 +03:00
### -i, --include {#include}
2020-08-27 10:07:46 +03:00
2022-02-15 11:48:38 +03:00
Include the HTTP headers in the output (last entry).
2020-08-27 10:07:46 +03:00
2021-09-26 10:04:10 +03:00
### --ignore-asserts {#ignore-asserts}
Ignore all asserts defined in the Hurl file.
2022-02-15 11:48:38 +03:00
### -k, --insecure {#insecure}
2020-08-27 10:07:46 +03:00
2022-02-15 11:48:38 +03:00
This option explicitly allows Hurl to perform "insecure" SSL connections and transfers.
2020-08-27 10:07:46 +03:00
2021-01-16 16:18:21 +03:00
### --interactive {#interactive}
Stop between requests.
This is similar to a break point, You can then continue (Press C) or quit (Press Q).
2021-12-03 22:15:11 +03:00
### --json {#json}
2020-08-27 10:07:46 +03:00
2021-12-03 22:15:11 +03:00
Output each hurl file result to JSON. The format is very closed to HAR format.
2020-08-27 10:07:46 +03:00
2022-12-19 23:30:08 +03:00
### --key <KEY> {#key}
Private key file name.
2022-10-24 21:58:56 +03:00
### --max-redirs <NUM> {#max-redirs}
2020-08-27 10:07:46 +03:00
2022-02-15 11:48:38 +03:00
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.
2020-08-27 10:07:46 +03:00
2022-10-24 21:58:56 +03:00
### -m, --max-time <SECONDS> {#max-time}
2020-09-23 22:27:49 +03:00
Maximum time in seconds that you allow a request/response to take. This is the standard timeout.
2022-12-19 23:30:08 +03:00
See also [`--connect-timeout` ](#connect-timeout ).
2020-09-23 22:27:49 +03:00
2021-12-03 22:15:11 +03:00
### --no-color {#no-color}
2020-08-27 10:07:46 +03:00
2022-10-24 21:58:56 +03:00
Do not colorize output.
2020-08-27 10:07:46 +03:00
2021-12-03 22:15:11 +03:00
### --no-output {#no-output}
Suppress output. By default, Hurl outputs the body of the last response.
2022-10-24 21:58:56 +03:00
### --noproxy <HOST(S)> {#noproxy}
2020-08-27 10:07:46 +03:00
Comma-separated list of hosts which do not use a proxy.
Override value from Environment variable no_proxy.
2022-10-24 21:58:56 +03:00
### -o, --output <FILE> {#output}
2020-08-27 10:07:46 +03:00
2022-10-24 21:58:56 +03:00
Write output to FILE instead of stdout.
2020-08-27 10:07:46 +03:00
2023-06-28 17:14:06 +03:00
### --path-as-is {#path-as-is}
Tell Hurl to not handle sequences of /../ or /./ in the given URL path. Normally Hurl will squash or merge them according to standards but with this option set you tell it not to do that.
2022-12-19 23:30:08 +03:00
### -x, --proxy <[PROTOCOL://]HOST[:PORT]> {#proxy}
2022-02-15 11:48:38 +03:00
Use the specified proxy.
2022-10-24 21:58:56 +03:00
### --report-junit <FILE> {#report-junit}
2022-02-01 19:11:38 +03:00
2022-10-24 21:58:56 +03:00
Generate JUnit File.
2022-02-01 19:11:38 +03:00
2022-10-24 21:58:56 +03:00
If the FILE report already exists, it will be updated with the new test results.
2022-02-01 19:11:38 +03:00
2022-10-24 21:58:56 +03:00
### --report-html <DIR> {#report-html}
2022-02-01 19:11:38 +03:00
2022-10-24 21:58:56 +03:00
Generate HTML report in DIR.
2022-02-01 19:11:38 +03:00
If the HTML report already exists, it will be updated with the new test results.
2022-12-19 23:30:08 +03:00
### --resolve <HOST:PORT:ADDR> {#resolve} <HOST:PORT:ADDR>
Provide a custom address for a specific host and port pair. Using this, you can make the Hurl requests(s) use a specified address and prevent the otherwise normally resolved address to be used. Consider it a sort of /etc/hosts alternative provided on the command line.
2023-06-28 17:14:06 +03:00
### --retry <NUM> {#retry}
2022-10-24 21:58:56 +03:00
2023-06-28 17:14:06 +03:00
Maximum number of retries, 0 for no retries, -1 for unlimited retries. Retry happens if any error occurs (asserts, captures, runtimes etc...).
2022-10-24 21:58:56 +03:00
### --retry-interval <MILLISECONDS> {#retry-interval}
Duration in milliseconds between each retry. Default is 1000 ms.
2022-12-19 23:30:08 +03:00
### --ssl-no-revoke {#ssl-no-revoke}
(Windows) This option tells Hurl to disable certificate revocation checks. WARNING: this option loosens the SSL security, and by using this flag you ask for exactly that.
2021-07-28 22:29:40 +03:00
### --test {#test}
2022-09-02 01:11:36 +03:00
Activate test mode: with this, the HTTP response is not outputted anymore, progress is reported for each Hurl file tested, and a text summary is displayed when all files have been run.
2021-07-28 22:29:40 +03:00
2022-10-24 21:58:56 +03:00
### --to-entry <ENTRY_NUMBER> {#to-entry}
2020-08-27 10:07:46 +03:00
2022-02-15 11:48:38 +03:00
Execute Hurl file to ENTRY_NUMBER (starting at 1).
Ignore the remaining of the file. It is useful for debugging a session.
2020-08-27 10:07:46 +03:00
2022-10-24 21:58:56 +03:00
### -u, --user <USER:PASSWORD> {#user}
2020-10-21 14:48:22 +03:00
Add basic Authentication header to each request.
2020-08-27 10:07:46 +03:00
2022-10-24 21:58:56 +03:00
### -A, --user-agent <NAME> {#user-agent}
2022-02-10 23:51:21 +03:00
Specify the User-Agent string to send to the HTTP server.
2022-10-24 21:58:56 +03:00
### --variable <NAME=VALUE> {#variable}
2020-08-27 10:07:46 +03:00
Define variable (name/value) to be used in Hurl templates.
2022-10-24 21:58:56 +03:00
### --variables-file <FILE> {#variables-file}
2021-01-09 12:25:01 +03:00
Set properties file in which your define your variables.
2022-08-16 13:08:14 +03:00
Each variable is defined as name=value exactly as with [`--variable` ](#variable ) option.
2021-01-09 12:25:01 +03:00
Note that defining a variable twice produces an error.
2020-08-27 10:07:46 +03:00
### -v, --verbose {#verbose}
2022-08-16 15:17:44 +03:00
Turn on verbose output on standard error stream.
2020-08-27 10:07:46 +03:00
Useful for debugging.
A line starting with '>' means data sent by Hurl.
A line staring with '< ' means data received by Hurl.
A line starting with '*' means additional info provided by Hurl.
2022-10-24 21:58:56 +03:00
If you only want HTTP headers in the output, [`-i, --include` ](#include ) might be the option you're looking for.
2020-08-27 10:07:46 +03:00
2022-08-16 15:17:44 +03:00
### --very-verbose {#very-verbose}
Turn on more verbose output on standard error stream.
2022-10-24 21:58:56 +03:00
In contrast to [`--verbose` ](#verbose ) option, this option outputs the full HTTP body request and response on standard error. In addition, lines starting with '**' are libcurl debug logs.
2022-08-16 15:17:44 +03:00
2022-02-15 11:48:38 +03:00
### -h, --help {#help}
Usage help. This lists all current command line options with a short description.
2020-08-27 10:07:46 +03:00
### -V, --version {#version}
Prints version information
## ENVIRONMENT
Environment variables can only be specified in lowercase.
2022-08-16 13:08:14 +03:00
Using an environment variable to set the proxy has the same effect as using the [`-x, --proxy` ](#proxy ) option.
2020-08-27 10:07:46 +03:00
2023-01-27 13:01:59 +03:00
### http_proxy [PROTOCOL://]<HOST>[:PORT]
2020-08-27 10:07:46 +03:00
Sets the proxy server to use for HTTP.
2023-01-27 13:01:59 +03:00
### https_proxy [PROTOCOL://]<HOST>[:PORT]
2020-08-27 10:07:46 +03:00
Sets the proxy server to use for HTTPS.
2023-01-27 13:01:59 +03:00
### all_proxy [PROTOCOL://]<HOST>[:PORT]
2020-08-27 10:07:46 +03:00
Sets the proxy server to use if no protocol-specific proxy is set.
### no_proxy <comma-separated list of hosts>
2022-08-16 13:08:14 +03:00
List of host names that shouldn't go through any proxy.
2020-08-27 10:07:46 +03:00
2022-02-15 15:18:07 +03:00
### HURL_name value
2022-08-16 13:08:14 +03:00
Define variable (name/value) to be used in Hurl templates. This is similar than [`--variable` ](#variable ) and [`--variables-file` ](#variables-file ) options.
### NO_COLOR
When set to a non-empty string, do not colorize output (see [`--no-color` ](#no-color ) option).
2022-02-15 15:18:07 +03:00
2020-08-27 10:07:46 +03:00
## EXIT CODES
2023-04-14 10:46:27 +03:00
### 0
Success.
2020-08-27 10:07:46 +03:00
### 1
2021-10-24 00:07:37 +03:00
Failed to parse command-line options.
2020-08-27 10:07:46 +03:00
### 2
2021-10-24 00:07:37 +03:00
Input File Parsing Error.
2020-08-27 10:07:46 +03:00
### 3
2021-10-24 00:07:37 +03:00
Runtime error (such as failure to connect to host).
2020-08-27 10:07:46 +03:00
### 4
2021-10-24 00:07:37 +03:00
Assert Error.
2020-08-27 10:07:46 +03:00
## WWW
[https://hurl.dev ](https://hurl.dev )
## SEE ALSO
curl(1) hurlfmt(1)