Curl command doesn't download the file (linux mint)

Cosmin Ioniță picture Cosmin Ioniță · Dec 13, 2014 · Viewed 16.5k times · Source

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.

Answer

Ravi Gehlot picture Ravi Gehlot · Dec 13, 2014

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?