J'utilise Mac OS 10.11.6 El Capitan. Il y a un lien que je voudrais télécharger par programme:
https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-osx10.11-x86_64.dmg
Si je colle cette URL dans n'importe quel navigateur (par exemple Safari), le téléchargement fonctionne parfaitement.
Cependant, si j'essaie de télécharger la même URL à partir de la ligne de commande curl
, cela ne fonctionne pas - le résultat est un fichier vide:
$ 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
$
Bien sûr, je peux obtenir le fichier via le navigateur, mais je voudrais comprendre pourquoi la curl
commande ci-dessus ne fonctionne pas.
Pourquoi ne peut-il pas curl
télécharger ce fichier correctement, alors qu'il est manifestement présent sur le site Web et peut être correctement accédé et téléchargé via un navigateur Web graphique?
User-Agent
. De plus, certains téléchargements de navigateur peuvent réussir en raison de la présence de cookies de session (c'est-à-dire si vous êtes connecté) uniquement sur ledit navigateur.curl -v
pour "verbose". Il imprimera à l'erreur standard diverses informations sur la connexion, la demande et la réponse. Dans ce cas, vous verriez que la réponse comprendHTTP 302 Found
(un code de redirection) et un en-Location
tête avec l'URL vers laquelle aller. Ensuite, vous pourriezman curl
savoir comment lui dire de suivre les redirections.Réponses:
Il y a une redirection sur le côté serveur Web à l'URL suivante:
http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.16-osx10.11-x86_64.dmg
. Puisqu'il s'agit d'un CDN, le comportement exact (que vous soyez redirigé ou non) peut dépendre de votre emplacement.curl
ne suit pas les redirections par défaut. Pour lui dire de le faire, ajoutez l'-L
argument:la source
Si le navigateur est en mesure de télécharger le fichier, vous pouvez inspecter ce que fait le navigateur. Sur Google Chrome, vous pouvez utiliser ce qui suit pour voir ce qui se passe.
1) [Affichage> Développeur> Outils de développement> Onglet Réseau> onglet En-têtes]
2) Cliquez sur le lien de téléchargement.
3) Le lien du fichier apparaîtra sur l'onglet des outils de développement.
4) Faites un clic droit sur le fichier et sélectionnez Copier> Copier en tant que cURL.
Vous avez maintenant un lien curl qui fonctionnera. Il aura probablement des paramètres excédentaires que vous pouvez supprimer.
Plus de détails: https://lornajane.net/posts/2013/chrome-feature-copy-as-curl
la source
Je vais convertir l'un des commentaires de ce post en réponse.
Il existe de nombreux liens HTTP / HTTPS qui nécessitent certains en-têtes pour fonctionner. Ainsi, cela entraînera une réponse fonctionnelle d'un navigateur Web, mais pas une réponse fonctionnelle dans une demande Web principale comme curl.
Je viens de tomber sur un site qui nécessite tous les en-têtes suivants. L'omission de les spécifier a entraîné un délai d'attente.
la source