Cette question concerne la version en ligne de commande de cURL.
J'essaie de télécharger un fichier à partir d'un script CGI.
http://example.com/Perl/dl.pl?ID=2
En utilisant un navigateur, le nom de fichier apparaît comme remotefilename.gz
. cURL souhaite enregistrer le fichier sous dl.pl?ID=2
.
Comment puis-je obtenir cURL pour enregistrer dans un fichier avec le nom de fichier de l'en-tête de réponse?
si vous avez une nouvelle boucle assez (version 7.20.0 ou ultérieure), - J/- remote-header-name est ce que vous voulez.
Vous utilisez -J conjointement avec - O , ce qui fait que curl utilise la partie du nom de fichier de l'URL comme principal moyen de nommer le fichier de sortie, puis s'il y a un en-tête Content-disposition: dans le réponse, curl utilisera ce nom à la place.
curl http://example.com/dl.php?file=3123123 -O -J
si le serveur utilise la redirection, utilisez-les:
--location-trusted
--max-redirs 10
J'ai trouvé que curl -OJ me donnait une erreur de segmentation: 11 erreur lors de la tentative de téléchargement de plusieurs URL à la fois.
Ma solution était d'utiliser wget. La dernière version prend en charge les en-têtes HTTP Content-Disposition, qui contiennent souvent des informations sur le nom de fichier.
wget --content-disposition http://example.com/download/url