Comment télécharger des fichiers en ligne de commande sous Windows comme wget ou curl


348

Comment puis-je télécharger quelque chose directement sur le Web sans Internet Explorer ou Firefox en ouvrant Acrobat Reader / Quicktime / MS Word / peu importe?

J'utilise Windows, donc une version Windows de Wget ferait l'affaire.


Il suffit de cliquer avec le bouton droit de la souris sur un fichier et de cliquer sur "Enregistrer la cible sous" ou "Enregistrer le lien sous" ou "Enregistrer sous" (la langue varie en fonction de votre navigateur).
BrainSlugs83

25
Le point d’avoir une commande est d’être capable d’écrire un fichier de commandes et de l’exécuter (peut-être planifié en tant que tâche) à tout moment. C'est là que l'interface graphique manque.
Jbm

4
Comment télécharger avec MS Word?
Jaime Hablutzel

5
@ JaimeHablutzel Pourquoi voudriez-vous jamais télécharger quelque chose via MS Word? MS Word n'est pas un terminal.
Braden Best

1
@SDsolar Ou simplement voter / améliorer cette réponse ci-dessous.
Franklin Yu

Réponses:


180

Wget pour Windows devrait fonctionner.

De la FAQ Wget Wiki :

GNU Wget est un utilitaire réseau gratuit permettant de récupérer des fichiers du World Wide Web à l’aide de HTTP et FTP, les deux protocoles Internet les plus utilisés. Il fonctionne de manière non interactive, permettant ainsi de travailler en arrière-plan après la fermeture de session.

Dans cette section de la FAQ , des liens de téléchargement sont suggérés:

Binaires Windows

Le lien avec la courtoisie de Jernej Simončič est utilisé à la place.


9
Il y a aussi Winwget cybershade.us/winwget si vous préférez une interface graphique
Col

13
La version autonome est téléchargeable à partir de ce lien .
Vito Gentile

5
Versions de Windows plus récentes, même les plus récentes (jusqu'à ce jour) , fournies par Jernej Simončič
Gras Double

1
@cixelsyd Lien mis à jour vers une autre source.
clearkimura

1
eternallybored.org/misc/wget/ est signalé par un antivirus d'entreprise sur mon système. Black Carbon / Bit 9. Probablement faux positif. Mais sourceforge on court. Ne supporte pas sslv3.
TamusJRoyce

311

Une alternative que j'ai découverte récemment avec PowerShell:

$client = new-object System.Net.WebClient
$client.DownloadFile("http://www.xyz.net/file.txt","C:\tmp\file.txt")

Cela fonctionne aussi bien avec les requêtes GET.

Si vous devez spécifier des informations d'identification pour télécharger le fichier, ajoutez la ligne suivante entre les deux:

$client.Credentials =  Get-Credential                

Une invite de connexion Windows standard apparaîtra. Les informations d'identification que vous entrez ici seront utilisées pour télécharger le fichier. Vous ne devez faire cela qu'une fois pour toutes les fois où vous utiliserez l'objet $ client.


91
Vous pouvez également le faire en une ligne:(new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt','C:\tmp\file.txt')
schellack

16
@Rob Powershell est intégré à Windows ...
nhinkle

9
À partir de Vista, oui.
Arran

3
@ BrainSlugs83, absolument, mais beaucoup, beaucoup de gens utilisent encore XP. C'est simplement quelque chose à garder à l'esprit.
Arran

4
@ BrainSlugs83, vous sous-estimez le nombre de personnes toujours sur des systèmes Windows plus anciens. Je ne comprends pas le problème, j'ai souligné que c'était uniquement à partir de Vista. Les gens peuvent choisir de l'ignorer ou de dire "hé merci!", Mais vous ....? Si vous avez un problème, créez un chat et nous pourrons parler. Quelqu'un avec un représentant (comme vous) devrait comprendre que ce n’est pas le lieu de la discussion.
Arran

83

Si vous avez PowerShell> = 3.0, vous pouvez utiliser Invoke-WebRequest

Invoke-WebRequest -OutFile index.html http://superuser.com

Ou joué au golf

iwr -outf index.html http://superuser.com

Télécharger un fichier via HTTP sous Windows


Cela ne fonctionne pas avec les redirections sur sourceforge (et éventuellement sur d'autres sites), contrairement à System.Net.WebClient. Cependant, vous pouvez faire un Invoke-WebRequesttravail en ajoutant -UserAgent [Microsoft.PowerShell.Commands.PSUserAgent]::FireFox.
Ela782

Existe-t-il une option pour voir la progression du téléchargement?
Franklin Yu

@FranklinYu les progrès montreront si le fichier est assez volumineux
Steven Penny

Existe-t-il une option pour ne pas spécifier de fichier de sortie, mais toujours sauvegarder (comme wgetou curl -O, curl --remote-nameou curl -J?)
Tomasz Gandor

60

Windows a son propre utilitaire de téléchargement en ligne de commande - BITSAdmin :

BITSAdmin est un outil de ligne de commande que vous pouvez utiliser pour créer des tâches de téléchargement ou de téléchargement et surveiller leur progression.

EDIT : 26.01.15 - Voici mon aperçu de la façon dont un fichier peut être téléchargé sur Windows sans outils externes

Et un exemple complet de bitsadmin:

bitsadmin /transfer myDownloadJob /download /priority normal http://downloadsrv/10mb.zip c:\10mb.zip

Edit : 15.05.2018 - Il s'est avéré qu'il est également possible de télécharger un fichier avec certutil :

certutil.exe -urlcache -split -f "https://download.sysinternals.com/files/PSTools.zip" pstools.zip

Certutil n'est pas installé par défaut sur XP / Win2003, mais est disponible sur les versions Windows les plus récentes. Pour XP / 2003, vous aurez besoin du pack d'outils d'administration pour Windows Server 2003.


7
Intéressant. C'est un logiciel maladroit comparé à wget.
Matt H

2
Notez qu'il n'est pas livré avec Windows XP, et peut-être pas avec d'autres versions non plus.
Ian Dunn

12
Mise à jour: BITSAdmin est obsolète et sa disponibilité dans les futures versions de Windows n'est pas garantie. Les outils d'administration du service BITS sont désormais fournis par les applets de commande BITS PowerShell.
nulldev07

2
@ Matt: parce qu'il n'est pas supposé être wget en premier lieu? - see en.wikipedia.org/wiki/Background_Intelligent_Transfer_Service
peterchen

4
Impossible d'ajouter le fichier - 0x80070057
Tomáš Zato le

32

Enregistrez le texte suivant sous wget.jset appelez simplement

cscript /nologo wget.js http://example.com

C'est le code:

var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
WinHttpReq.Open("GET", WScript.Arguments(0), /*async=*/false);
WinHttpReq.Send();
WScript.Echo(WinHttpReq.ResponseText);

/* To save a binary file use this code instead of previous line
BinStream = new ActiveXObject("ADODB.Stream");
BinStream.Type = 1;
BinStream.Open();
BinStream.Write(WinHttpReq.ResponseBody);
BinStream.SaveToFile("out.bin");
*/

Dans quelle langue ce script est-il utile? J'aimerais trouver plus de documentation de référence. Ne ressemble pas tout à fait à vb
G-.

1
Utile pour les fichiers individuels. Besoin d'amélioration pour le téléchargement récursif et https.
opticyclique

4
@G-. Je suis en retard à la fête, mais c'est JavaScript.
Prochaine étape

J'ai essayé de le faire pour database.clamav.net/daily.cvd , mais il n'a téléchargé que 88 Ko de 44 Mo :(
kokbira

22

Un cURL natif pour Windows est disponible ici . Il existe de nombreuses variétés disponibles, avec et sans support SSL.

Vous n’avez pas besoin du bagage supplémentaire de Cygwin et autres, mais d’un seul fichier EXE.


Il est également important de savoir qu'il existe des pseudonymes wgetet des curlalias dans toutes les versions modernes de Windows Powershell. Ils sont équivalents.

Aucun fichier ni téléchargement supplémentaire n'est requis pour obtenir une wgetfonctionnalité:

Utilisation de Curl In Powershell (The Geek Sociable)

Extrait:

Vous pouvez taper une commande cURL comme celle qui télécharge un fichier depuis un référentiel GitHub.

curl http://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-ubuntu/azuredeploy.json

et cela semblera fonctionner, mais en réalité, cURL est utilisé comme alias. Dans le cas ci-dessus, vous obtiendrez simplement les en-têtes au lieu du fichier lui-même.

Les alias dans PowerShell vous permettent de créer des raccourcis pour les commandes plus longues afin que vous n'ayez pas à les taper tout le temps.

Si vous tapez la commande Get-Alias, elle vous donnera une liste de tous les alias utilisés dans PowerShell. Comme vous pouvez le constater, la commande curl appelle simplement la commande Invoke-WebRequest. Ils sont similaires mais pas les mêmes, c'est pourquoi la demande ci-dessus ne fonctionne pas pour nous.

entrez la description de l'image ici

Pour que cela fonctionne correctement dans PowerShell, le moyen le plus simple consiste à utiliser des variables et l' -OutFileargument, comme indiqué ci-dessous:

entrez la description de l'image ici

(nom de fichier coupé dans l'image “ https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-ubuntu/azuredeploy.json ”)

Cette syntaxe téléchargera tout le contenu du fichier cible azuredeploy.jsondans le fichier local.newfile.json


Le principal avantage est qu'il est intégré à Powershell lui-même, de sorte que ce code s'exécutera directement sans téléchargement ou que toute autre création de fichier supplémentaire est requise pour le faire fonctionner sur toute version moderne de Windows.


Cela doit être fait directement sur une ligne, mais la ligne devient assez longue et n'est pas aussi lisible immédiatement.
SDsolar

21

J'ai créé un rapide fichier myGet.bat qui appelle la méthode PowerShell décrite ci-dessus.

@Echo OFF
SetLocal EnableDelayedExpansion
Set Var=%1
Set Var=!Var:http://=!
Set Var=!Var:/=,!
Set Var=!Var:%%20=?!
Set Var=!Var: =?!
Call :LOOP !var!
Echo.Downloading: %1 to %~p0!FN!
powershell.exe -Command (new-object System.Net.WebClient).DownloadFile('%1','%~p0!FN!')
GoTo :EOF
:LOOP
If "%1"=="" GoTo :EOF
Set FN=%1
Set FN=!FN:?= !
Shift
GoTo :LOOP

J'ai emprunté du code à l' URL d'analyse pour le nom de fichier avec de l'espace .


1
pourquoi le vote négatif? cela me semble correct et constitue une réponse directe à la question. Oui, c'est maladroit et pourrait être amélioré, comme s'échapper de l'esperluette (&) dans l'URL, mais cela fonctionne tel quel.
Matt Wilkie

Ne serait-il pas plus simple d'écrire un script PowerShell ???
SamB

1
powershell.exe -Command "Invoke-WebRequest -OutFile ./file-name https://location/file-name"<- Utilisation simple d’une ligne téléphonique dans l’emplacement et le nom du fichier de codage.
James Eby

8

Je cherchais la même chose, et comme je n'avais aucun privilège d'installer l'un des packages ci-dessus, j'ai opté pour une petite solution de contournement (pour télécharger plus de 30 fichiers):

  • J'ai créé un fichier batch
  • Répertorié tous les fichiers
  • Mettez firefox.exeau début de chaque ligne
  • Je suis allé au répertoire firefox dans Program Files
  • A couru.

4

Si PowerShell est une option, il s'agit de la route préférée, car vous n'avez (potentiellement) pas besoin d'installer quoi que ce soit d'autre:

(new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt', 'C:\tmp\file.tx??t')

En cas d'échec, Wget pour Windows, comme d'autres l'ont fait remarquer, est certainement la deuxième meilleure option. Comme indiqué dans une autre réponse, il semblerait que vous puissiez télécharger Wget tout seul ou le récupérer dans le cadre de Cygwin ou de MSys .

Si, pour une raison quelconque, vous vous retrouvez coincé dans une impasse temporelle en utilisant un ordinateur dépourvu de PowerShell et que vous n’avez aucun accès à un navigateur Web opérationnel (c’est-à-dire, Internet Explorer est le seul navigateur du système et ses paramètres). sont corrompus), et votre fichier est sur un site FTP (par opposition à HTTP):

start->run "FTP", press "OK".

Si la mémoire est utile, elle existe depuis Windows 98 et je peux confirmer qu’elle existe toujours dans Windows 8 RTM (vous devrez peut-être entrer appwiz.cplet ajouter / supprimer des fonctionnalités pour l’obtenir). Cet utilitaire peut à la fois télécharger et télécharger des fichiers vers / depuis des sites FTP sur le Web. Il peut également être utilisé dans des scripts pour automatiser l'une ou l'autre opération.

Cet outil intégré a été une véritable bouée de sauvetage pour moi dans le passé, en particulier à l'époque de ftp.cdrom.com - j'ai déjà téléchargé Firefox de cette façon, sur une machine complètement en panne qui ne possédait qu'un accès Internet par ligne commutée. connexion (à l’époque où la taille de paquet maximale du sneakernet était toujours de 1,44 Mo et que Firefox s’appelait encore "Netscape" / me fait trollface ).

Quelques astuces: c'est son propre processeur de commande et sa propre syntaxe. Essayez de taper "aide". Tous les sites FTP nécessitent un nom d'utilisateur et un mot de passe. mais s'ils autorisent les utilisateurs "anonymes", le nom d'utilisateur est "anonymous" et le mot de passe est votre adresse électronique (vous pouvez en créer une si vous ne souhaitez pas être suivi, mais il existe généralement une sorte de logique une adresse email valide).


+1 pour penser à ftp en ligne de commande! Cependant, wget et powershell ont été mentionnés bien avant que vous ne rejoigniez le parti, donc -1 là-bas. : - /
matt wilkie

Les autres réponses de PowerShells que j'ai vues étaient toutes des multilignes et / ou avaient une odeur de code - il s'agit d'une ligne courte et simple pour télécharger un fichier. - Aussi, je voulais fournir une réponse qui couvrait toutes les bases. :-)
BrainSlugs83

1
Je ne suis pas sûr de savoir pourquoi vous avez deux points d'interrogation dans le fichier de destinationC:\tmp\file.tx??t
Ploni



2

Vous pouvez également utiliser le wgetpackage dans PowerShell . ; ^) Pour ouvrir, appuyez sur la touche Windows et tapez "PowerShell" ou Windows-R et tapez "PowerShell" et appuyez sur Entrée.

Aucune installation nécessaire.

Une différence intéressante par rapport à conventionnelle wget(plus sur ce lien ): vous ne pouvez pas simplement utiliser le supérieur à pour diriger vers un fichier. wgetdans PowerShell n’est qu’un emballage pratique Invoke-WebRequest, et vous devez utiliser sa syntaxe pour écrire dans un fichier.

wget https://superuser.com/questions/25538 -OutFile rubySlippers.html

1
-OutFilea fait le travail!
Dimitry K

1

Vous pouvez obtenir WGet pour Windows ici . Vous pouvez également cliquer avec le bouton droit de la souris sur le lien de téléchargement de l’élément que vous souhaitez télécharger et choisir Enregistrer sous. Cela téléchargera le fichier et ne l'ouvrira pas dans l'application assignée.


1

Je pense que l'installation wgetvia Chocolatey est la méthode la plus simple.

  1. Installer Chocolatey
  2. A partir de la ligne de commande, tapez: choco install wget
  3. Vous pouvez ensuite utiliser wgetla ligne de commande comme sur les systèmes * nix.

1

Rechercher une /downloadfonction sur https://lolbas-project.github.io .

En ce moment il y a Bitsadmin.exe, Certutil.exe, Esentutl.exe, Expand.exe, Extrac32.exe, Findstr.exe, Hh.exe, Ieexec.exe, Makecab.exe, Replace.exepour Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10 et les versions équivalentes Server.


0

Si vous voulez une interface graphique, essayez alors VisualWget , qui est en fait propre et complet. Il est basé sur GNU Wget pour son moteur de téléchargement.

EDIT: lien mis à jour.


1
voici un lien mis à jour: sites.google.com/site/visualwget/… (les téléchargements se trouvent au bas de la page, utilisez les petites flèches à droite)
Reed Hedges

0

Comme indiqué dans cette réponse , vous pouvez utiliser les éléments suivants dans Powershell:

Import-Module bitstransfer
start-bitstransfer -source http://something/something.ext -destination c:\something.ext

-1

Unxutils est une alternative à gnuwin32, qui inclut wget.


vous pouvez gérer avec unxutils mais c'est vieux, il utilise une ancienne version de wget. gnuwin32 est la chose à utiliser. pas tout à fait aussi facile à installer et à trouver, mais il y a aussi beaucoup plus qu'unxutils.
Barlop

-3

Si vous avez besoin d’une publication visuelle pour Windows, en voici une.
Vous pouvez poster des données ou des fichiers avec elle.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.