Follow Redirects with cURL

By  on  

I love playing around with cURL. There's something about loading websites via command line that makes me feel like some type of smug hacker, just like tweeting from command line does.

I recently cURL'd the Google homepage and saw the following:

curl google.com

#<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
#<TITLE>301 Moved</TITLE></HEAD><BODY>
#<H1>301 Moved</H1>
#The document has moved
#<A HREF="http://www.google.com/">here</A>.
#</BODY></HTML>

I found it weird that Google does the initial redirect but I still want to get the source of the Google homepage with cURL, as with any site that may do a redirect without you noticing. Luckily it's just a single flag:

curl -L google.com

#<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en">...

The -L flag instructs cURL to follow any redirect so that you reach the eventual endpoint. Those tiny redirects are just noise anyways, right?

Recent Features

  • By
    CSS @supports

    Feature detection via JavaScript is a client side best practice and for all the right reasons, but unfortunately that same functionality hasn't been available within CSS.  What we end up doing is repeating the same properties multiple times with each browser prefix.  Yuck.  Another thing we...

  • By
    9 Mind-Blowing Canvas Demos

    The <canvas> element has been a revelation for the visual experts among our ranks.  Canvas provides the means for incredible and efficient animations with the added bonus of no Flash; these developers can flash their awesome JavaScript skills instead.  Here are nine unbelievable canvas demos that...

Incredible Demos

Discussion

  1. Dan

    Is there a way to do this outside of the command line in PHP?

    • H.Gerber

      The curl-lib in PHP offers an option for that:

      $handle = curl_init();
      ...
      curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);
      ...
      curl_exec($handle);
      ...
      
    • Jonny

      And if the url is using/forcing https, set this option before executing the curl:

      curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
      
    • Robert Munro

      Please don’t do that, unless you really don’t care about the content of the download. It essentially says “Ignore the SSL errors if it’s broken – trust the same as you would an unencrypted URL.”

      The data will still be encrypted, but could be coming from a man-in-the-middle, not from where you thing it’s coming from.

  2. The implementation of curl in PHP has an option for that.

    See the following link:
    http://stackoverflow.com/questions/3519939/make-curl-follow-redirects

  3. A

    if you liked curl, you’ll love lynx..

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!