Télécharger un fichier via HTTP à partir d'un script sous Windows

19

Je veux un moyen de télécharger un fichier via HTTP étant donné son URL (similaire au fonctionnement de wget). J'ai vu les réponses à cette question , mais j'ai deux changements aux exigences:

  • Je voudrais qu'il fonctionne sur Windows 7 ou une version ultérieure (bien que si cela fonctionne sur Windows XP, c'est un bonus).
  • Je dois pouvoir le faire sur une machine de stock avec rien d'autre que le script, qui devrait être du texte qui pourrait être facilement entré sur un clavier ou copié / collé.
  • Plus c'est court, mieux c'est.

Donc, essentiellement, je voudrais un script .cmd (batch), VBScript ou PowerShell qui puisse effectuer le téléchargement. Il pourrait utiliser COM ou appeler Internet Explorer, mais il doit fonctionner sans aucune entrée et devrait se comporter correctement lorsqu'il est appelé sans affichage (par exemple via une session Telnet ).

Jason R. Coombs
la source
dload v1.0 un outil de ligne de commande win32 comme wget superuser.com/a/833445/384998
seizu
Pas un doublon car cette question recherche spécifiquement quelque chose qui fonctionnera sur une machine stock (sans logiciel supplémentaire, comme wget pour Windows).
Jason R. Coombs
@ JasonR.Coombs La réponse acceptée est la même que l'une des réponses à cette question, donc le futur lecteur ne recevra rien de plus.
Franklin Yu
Je suis d'accord; à ce stade, la question plus générale remplace celle-ci.
Jason R. Coombs

Réponses:

16

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

Invoke-WebRequest -OutFile su.htm -Uri superuser.com

Ou joué au golf:

iwr -outf su.htm superuser.com
Steven Penny
la source
2
Une ligne à partir de l'invite cmd régulière:powershell -command "iwr -outf su.htm superuser.com"
valiano
14

J'utiliserais BITS ( apprêt ):

Background Intelligent Transfer Service (BITS) is a component of modern
Microsoft Windows operating systems that facilitates prioritized,
throttled, and asynchronous transfer of files between machines using
idle network bandwidth.

À partir de Windows 7, Microsoft conseille d'utiliser les applets de commande PowerShell pour BITS.

% import-module bitstransfer
% Start-BitsTransfer http://path/to/file C:\Path\for\local\file

Vous pouvez également utiliser BITS via COM , voir ici pour un exemple de VBScript . Et il y a ' bitsadmin ', un outil en ligne de commande pour contrôler les téléchargements:

BITSAdmin is a command-line tool that you can use to create download or
upload jobs and monitor their progress.

Dans Windows 7 bitsadmin.exedéclare lui-même qu'il s'agit d'un outil obsolète. Cependant:

% bitsadmin.exe /transfer "NAME" http://path/to/file C:\Path\for\local\file
akira
la source
2
Il semble maintenant que bitsadmin est obsolète et ne sera peut-être plus inclus dans les futures versions de Windows.
Jason R. Coombs
@ JasonR.Coombs: lien? référence?
akira
2
technet.microsoft.com/en-us/magazine/ff382721.aspx ... donc, au lieu de "bitadmin.exe", on utilise simplement des applets de commande bits.
akira
1
Merci pour ça. Tout ce que je devais continuer, c'était bitsadmin me disait qu'il était obsolète quand je l'ai fait fonctionner.
Jason R. Coombs
notez que l'out-path doit être entièrement qualifié et non relatif (tip du chapeau superuser.com/questions/365755/… )
matt wilkie
7

Essayez la classe Web Client . Il y a un exemple de script PowerShell au bas de cette page:

$c = new-object system.net.WebClient
$r = new-object system.io.StreamReader $c.OpenRead("http://superuser.com")
echo $r.ReadToEnd()
Charles Gargent
la source
2
C'est utile. J'ai trouvé que le WebClient a également une méthode DownloadFile, qui téléchargera le contenu directement dans un fichier. Merci.
Jason R. Coombs
3

Copiez et collez les six lignes suivantes (ou simplement les quatre dernières lignes) dans un fichier texte. Renommez-le ensuite en vget.vbs.

'cscript vget.vbs >FILE.TXT
'Run this vbscript at command line. Use above syntax to download/create FILE.TXT
Set oX = CreateObject("Microsoft.XmlHTTP")
oX.Open "GET", "http://www.exampleURL.com/FILE.TXT", False
oX.Send ""
WScript.Echo oX.responseText

Évidemment, vous devez personnaliser trois choses dans ce script pour le faire fonctionner pour vous.

  1. La partie qui dit " http://www.exampleURL.com/FILE.TXT ". Vous devrez remplacer l'URL correcte pour le fichier que vous souhaitez télécharger.
  2. La commande que vous exécuterez sur la ligne de commande pour exécuter ce script; devra spécifier le nom correct pour le script vget.vbs, si c'est ainsi que vous l'appeliez.
  3. Et le nom vers FILE.TXTlequel vous souhaitez que la sortie soit dirigée par une ligne de commande par lots DOS .

J'ai seulement essayé de l'utiliser pour télécharger un fichier texte ASCII brut (un script cmd plus puissant) à partir de mon compte Dropbox , donc je ne sais pas si cela fonctionnera pour les fichiers EXE, etc .; ou d'autres serveurs Web.

Si vous vous dispensez des deux premières lignes de commentaire, elles ne font que quatre lignes. Si vous connaissez VBScript, vous pourriez même être en mesure de transporter ce code dans votre tête et de le saisir dans la ligne de commande si nécessaire. Il ne contient que cinq éléments de commande clés: CreateObject, .Open, .Send, WScript.Echoet .responseText.

ozidroid
la source