Używam Mac OS 10.11.6 El Capitan. Jest link, który chciałbym pobrać programowo:
https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-osx10.11-x86_64.dmg
Jeśli wkleję ten adres URL do dowolnej przeglądarki (np. Safari), pobieranie działa idealnie.
Jeśli jednak spróbuję pobrać ten sam adres URL z wiersza polecenia przy użyciu curl
, to nie zadziała - wynikiem będzie pusty plik:
$ ls -lA
$ curl -O https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-osx10.11-x86_64.dmg
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
$ ls -lA
total 0
-rw-r--r-- 1 myname staff 0 Nov 7 14:07 mysql-5.7.16-osx10.11-x86_64.dmg
$
Oczywiście mogę pobrać plik za pośrednictwem przeglądarki, ale chciałbym zrozumieć, dlaczegocurl
komenda powyżej nie działa.
Dlaczego nie można curl
poprawnie pobrać tego pliku, skoro jest on wyraźnie widoczny na stronie internetowej i można go poprawnie wyświetlić i pobrać za pomocą graficznej przeglądarki internetowej?
curl -v
„pełnego”. Spowoduje to wydrukowanie do standardowego błędu różnych informacji o połączeniu, żądaniu i odpowiedzi. W takim przypadku zobaczysz, że odpowiedź zawiera HTTP 302 Found
(kod przekierowania) i Location
nagłówek z adresem URL, do którego chcesz przejść. Następnie możesz man curl
dowiedzieć się, jak powiedzieć, aby śledził przekierowania.
User-Agent
. Ponadto niektóre pliki do pobrania przeglądarki mogą się powieść z powodu sesyjnych plików cookie (tj. Jeśli jesteś zalogowany) znajdujących się tylko w tej przeglądarce.