hurl/docs/entry.md
2022-09-28 18:35:02 +10:00

117 lines
2.7 KiB
Markdown

# Entry
## Definition
A Hurl file is a list of entries, each entry being a mandatory [request], optionally followed by a [response].
Responses are not mandatory, a Hurl file consisting only of requests is perfectly valid. To sum up, responses can be used
to [capture values] to perform subsequent requests, or [add asserts to HTTP responses].
## Example
```hurl
# First, test home title.
GET https://acmecorp.net
HTTP/1.1 200
[Asserts]
xpath "normalize-space(//head/title)" == "Hello world!"
# Get some news, response description is optional
GET https://acmecorp.net/news
# Do a POST request without csrf token and check
# that status code is Forbidden 403
POST https://acmecorp.net/contact
[FormParams]
default: false
email: john.doe@rookie.org
number: 33611223344
HTTP/1.1 403
```
## Description
### Cookie storage
Requests in the same Hurl file share the cookie storage, enabling, for example, session based scenario.
### Redirects
By default, Hurl doesn't follow redirection. To effectively run a redirection, entries should describe each step
of the redirection, allowing insertion of asserts in each response.
```hurl
# First entry, test the redirection (status code and
# Location header)
GET http://google.fr
HTTP/1.1 301
Location: http://www.google.fr/
# Second entry, the 200 OK response
GET http://www.google.fr
HTTP/1.1 200
```
Alternatively, one can use [`--location`] option to force redirection
to be followed. In this case, asserts are executed on the last received response. Optionally, the number of
redirections can be limited with [`--max-redirs`].
```hurl
# Running hurl --location google.hurl
GET http://google.fr
HTTP/1.1 200
```
### Options
[Options] specified on the command line apply to every entry in an Hurl file. For instance, with [`--location` option],
every entry of a given file will follow redirection:
```shell
$ hurl --location foo.hurl
```
You can use an `[Options]` section to use option only for a specified option. For instance, in this Hurl file:
```hurl
GET https://google.fr
HTTP/* 301
GET https://google.fr
[Options]
location: true
HTTP/* 200
GET https://google.fr
HTTP/* 301
```
The second entry will follow location (and so we can test the status code to be 200 instead of 301).
You can use it to logs a specific entry:
```hurl
# ... previous entries
GET https://api.example.org
[Options]
very-verbose: true
HTTP/* 200
# ... next entries
```
[request]: /docs/request.md
[response]: /docs/response.md
[capture values]: /docs/capturing-response.md
[add asserts to HTTP responses]: /docs/asserting-response.md
[`--location`]: /docs/manual.md#location
[`--max-redirs`]: /docs/manual.md#max-redirs
[Options]: /docs/manual.md#options
[`--location` option]: /docs/manual.md#location