web-dev-qa-db-fra.com

Comment enregistrer un fichier en utilisant le nom de fichier de l'en-tête de réponse avec cURL?

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?

56
John

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.

76
Daniel Stenberg
curl http://example.com/dl.php?file=3123123 -O -J

si le serveur utilise la redirection, utilisez-les:

--location-trusted
--max-redirs 10
17
egiray

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
15
jchook