23

I want to download a file with curl and it doesn't work!

 curl -O https://github.com/systems-cs-pub-ro/uso/raw/master/tema1/help/hello.o

This is the example that I saw on many official sites. They say that the command above downloads the file hello.o. It doesn't! It just downloads some kind of output and stores it in a file with the same name.

If I run the command above, and I print the content of hello.o, it says:

 <html><body>You are being <a href="https://raw.githubusercontent.com/systems-cs-pub-ro/uso/master/tema1/help/hello.o">redirected</a>.</body></html>

The dimension of hello.o is 147 Bytes.

Also, if I type

  wget https://github.com/systems-cs-pub-ro/uso/raw/master/tema1/help/hello.o

it downloads the file hello.o exactly how it is! Now, it's dimension is 1,2 K

Is there a way to download the file hello.o using curl, exactly how I can download it using wget?

Thank you respectfully.

Cosmin Ioniță
  • 3,598
  • 4
  • 23
  • 48

1 Answers1

46

With Curl, you need to use the -L flag like this:

curl -L https://github.com/systems-cs-pub-ro/uso/raw/master/tema1/help/hello.o > hello.o

From Curl's man page:

-L, --location (HTTP/HTTPS) If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response code), this option will make curl redo the request on the new place. If used together with -i, --include or -I, --head, headers from all requested pages will be shown. When authentication is used, curl only sends its credentials to the initial host. If a redirect takes curl to a different host, it won't be able to intercept the user+password. See also --location-trusted on how to change this. You can limit the amount of redirects to follow by using the --max-redirs option. When curl follows a redirect and the request is not a plain GET (for example POST or PUT), it will do the following request with a GET if the HTTP response was 301, 302, or 303. If the response code was any other 3xx code, curl will re-send the following request using the same unmodified method.

Please be aware that your question has already been answered here: How do I download a tarball from GitHub using cURL?

Community
  • 1
  • 1
Ravi Gehlot
  • 1,099
  • 11
  • 17
  • You are welcome. If that answers your question, please choose it as the accepted answer. Thank you. – Ravi Gehlot Dec 13 '14 at 13:00
  • 2
    Improving the answer: you can do `curl -I http://releases.wikimedia.org/mediawiki/1.24/mediawiki-1.24.1.tar.gz`. Using `-I` option, will give you some details regarding your request, like the HTTP CODE which was returned (301). Then, you'll have the certainty that there's a redirection configured for the content that you are requesting. Regards and thanks for the answer :). – ivanleoncz Jun 20 '17 at 19:03
  • 1
    to find out the HTTP header use `curl -v` – Skyy2010 Oct 08 '18 at 14:53