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 curlpoprawnie 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 Locationnagłówek z adresem URL, do którego chcesz przejść. Następnie możesz man curldowiedzieć 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.