15,059
edits
No edit summary |
|||
| Line 66: | Line 66: | ||
curl -sI -L "https://example.com/" | grep -i "^location:" | curl -sI -L "https://example.com/" | grep -i "^location:" | ||
</pre> | </pre> | ||
This command '''traces the redirect chain of a URL''', printing only the destination of each redirect step. Here's the breakdown: | |||
<code>curl -sI -L "https://example.com/"</code> | |||
* '''<code>curl</code>''': a tool for sending HTTP requests | |||
* '''<code>-s</code>''' (silent): quiet mode, suppresses progress bars and other status info | |||
* '''<code>-I</code>''' (capital, <code>--head</code>): fetches only the '''HTTP headers''', not the page body — faster | |||
* '''<code>-L</code>''' (<code>--location</code>): if the server responds with a 3xx redirect status code (like 301, 302, 307), curl will '''automatically follow''' the new URL and keep requesting until it reaches the final page (or hits the redirect limit) | |||
* '''<code>"https://example.com/"</code>''': the target URL to query | |||
So this sends a HEAD request for each redirect step along the way, and prints all the response headers, which might look like: | |||
<pre> | |||
HTTP/1.1 301 Moved Permanently | |||
Location: https://www.example.com/ | |||
... | |||
HTTP/1.1 200 OK | |||
... | |||
</pre> | |||
<code>| grep -i "^location:"</code> | |||
* '''<code>|</code>''': pipes curl's output into <code>grep</code> | |||
* '''<code>grep -i</code>''': searches text, <code>-i</code> means case-insensitive (so it matches both <code>Location:</code> and <code>location:</code>) | |||
* '''<code>"^location:"</code>''': <code>^</code> means '''start of line''', so it only picks lines that '''begin with''' <code>location:</code> — that is, the new destination URL specified by the redirect header | |||
This command will: | |||
# Send a request to the target URL, fetching only headers | |||
# Automatically follow any redirects | |||
# Filter out every <code>Location:</code> line — i.e., the destination URL of '''each''' redirect step | |||
=== other tools === | === other tools === | ||