A Beginner's Guide to Curl: Part 3 - Seeing the Details
Tags: zsh, http, bash, cli
Published: 2023-03-04 16:41:15

In the previous article we learned about the `-o` or `--output` flag (or option).  Now we will explore the `-v` flag which stand for `--verbose`.

If we want to see all the verbose details of our request and response, we need to pass in the `-v` flag.  The particular option takes no arguments.  It's like a boolean, it's either on or off.

Now we'll see what's going on "under the hood" as the manual states.  Try the following command in your terminal.

```bash
$ curl -v http://www.example.com
```

The top what what was printed to your STDOUT should look something like this.

```bash
* Trying 2606:2800:220:1:248:1893:25c8:1946:80...
* Connected to www.example.com (2606:2800:220:1:248:1893:25c8:1946) port 80 (#0)
> GET / HTTP/1.1
> Host: www.example.com
> User-Agent: curl/7.85.0
> Accept: */*
```

The lines that begin with an asterisk are helpful messages curl is telling us.  The lines that begin with an angle bracket are the actual HTTP request/response details.

## The Request

These are the details of the HTTP request you just made.

Let's break it down line by line.

1. You attempted to connect to the IP address 2606:2800...  This is the full Internet Protocol Version 6 address which we referred to by the domain name `example.com`

2. Next we see that we successfully connected at port #80

3. This particular request method was a 'GET' request via the HTTP version 1 protocol.

4. The host domain name we specified in our command

5. An HTTP `header` we sent, being our `User-Agent` which is of course curl.  7.85.0 is my specific version.  Yours may be different.  You can see your version of curl by typing `$ curl -V`.

6. Lastly, another HTTP `header` we sent, being the `Accept` header which specifies what type of content (MIME type) we are willing to accept in response.  It this case, everything! `*/*`

## The Response

Here are the details of the response.

```bash
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Age: 266872
< Cache-Control: max-age=604800
< Content-Type: text/html; charset=UTF-8
< Date: Sat, 04 Mar 2023 16:21:04 GMT
< Etag: "3147526947+ident"
< Expires: Sat, 11 Mar 2023 16:21:04 GMT
< Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
< Server: ECS (cha/8094)
< Vary: Accept-Encoding
< X-Cache: HIT
< Content-Length: 1256
```

1. `* Mark bundle as not supporting multiuse`.  This message appears because in this case we are using HTTP version 1 which does not support multiplexing or multiuse.  HTTP 2 does.

2. The version of HTTP and the response status code.  In this case, it's successful. 200! OK!

The rest of the lines contain all the response headers sent back from example.com.  If you're interested, you can find information about all HTTP headers at https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers.

## How to look up specific curl options

One of the difficulties you will undoubtedly face when leaning curl is finding the right option from the manual.  Let's say you want to learn about the `--verbose` or `--output` flags but you don't feel like scrolling through the manual to find them.  You can search the manual with `grep`.

We are going to "pipe" the output of the manual into the `grep` utility.  Grep is basically a searching tool.  Try this command and then I'll explain what it's doing.

```bash
$ man curl | grep -B 5 -A 25 -e '-v, --verbose'
```

First, we used the vertical bar character or "pipe" to pipe the output of `man curl` into the `grep` command.

Grep takes an expression to search for. That's why we passed the `-e` flag with the argument `-v, --verbose`.  We are searching for that expression in the curl manual. Grep will return all the places where that specific string occurs.  There should be only one.

However, before the `-e` flag, we passed in two other flags and arguments: `-B` with argument `5` and `-A` with argument `25`.  That means we want to print out 5 lines `before` the expression occurs and 25 lines `after` the expressing occurs.

Use can use this piping trick to search for specific commands in the curl manual.

Ready to go more in depth?  Read [A Beginner's Guide to Curl: Part 4](https://dev.to/jvon1904/a-beginners-guide-to-curl-part-4-2ilg).