Я использую Mac OS 10.11.6 El Capitan. Есть ссылка, которую я хотел бы скачать программно:
https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-osx10.11-x86_64.dmg
Если я вставлю этот URL в любой браузер (например, Safari), загрузка будет работать отлично.
Тем не менее, если я пытаюсь загрузить тот же URL-адрес из командной строки с помощью curl
, он не работает - в результате получается пустой файл:
$ 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
$
Конечно , я могу получить файл через браузер, но я хотел бы понять , почемуcurl
выше команда не работает.
Почему нельзя curl
загрузить этот файл правильно, когда он явно присутствует на веб-сайте и может быть правильно доступен и загружен через графический веб-браузер?
User-Agent
. Кроме того, загрузка некоторых браузеров может быть успешной из-за того, что файлы cookie сеанса (т. Е. Если вы вошли в систему) присутствуют только в указанном браузере.curl -v
для «verbose». Он выведет к стандартной ошибке различную информацию о соединении, запросе и ответе. В этом случае вы увидите, что ответ включает в себяHTTP 302 Found
(код перенаправления) иLocation
заголовок с URL-адресом, по которому нужно перейти. Тогда вы моглиman curl
бы узнать, как сказать ему следовать перенаправлениям.Ответы:
Существует редирект на веб - сервер стороне по следующему адресу:
http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.16-osx10.11-x86_64.dmg
. Поскольку это CDN, точное поведение (независимо от того, перенаправлены вы или нет) может зависеть от вашего местоположения.curl
по умолчанию не выполняет перенаправления. Чтобы сказать это, добавьте-L
аргумент:источник
Если браузер может загрузить файл, вы можете проверить, что делает браузер. В Google Chrome вы можете использовать следующее, чтобы увидеть, что происходит.
1) [Просмотр> Разработчик> Инструменты разработчика> вкладка Сеть> вкладка Заголовки]
2) Нажмите на ссылку для скачивания.
3) Ссылка на файл появится на вкладке инструментов разработчика.
4) Щелкните правой кнопкой мыши файл и выберите «Копировать»> «Копировать как cURL».
Теперь у вас есть ссылка, которая будет работать. Вероятно, у него будут лишние параметры, которые вы можете обрезать.
Более подробная информация: https://lornajane.net/posts/2013/chrome-feature-copy-as-curl
источник
Я собираюсь преобразовать один из комментариев к этому посту в ответ.
Существует много HTTP / HTTPS-ссылок, для работы которых требуются определенные заголовки. Таким образом, это приведет к рабочему ответу от веб-браузера, но не к рабочему ответу на внутренний веб-запрос, такой как curl.
Я просто наткнулся на сайт, который требует все следующие заголовки. Невозможность указать их привела к таймауту.
источник