export ec=28; while [ $ec -eq 28 ]; do /usr/bin/curl -O -Y 150000 -C - "https://really-big-file.zip"; export ec=$?; done

Credit has to go to Nunez-Iglesias for writing this bash one-liner. \$? gives you the last exit code in bash and Curl exits with error code 28 when it breaks off a download due to its low speed. This is specified with the -Y option and the speed to break off at is given in bytes per second. Here I broke off at the 150kb/sec mark as indicated by 150000. So as long as the last exit code is 28, keep running this command. The -C option tells Curl to continue the download where it last broke off. If you are having problems, remove this option and just run the Curl download first. When it breaks then include the code above.