Скачать файл через HTTP из скрипта в Windows

19

Мне нужен способ загрузки файла через HTTP с учетом его URL (аналогично тому, как работает wget). Я видел ответы на этот вопрос , но у меня есть два изменения в требованиях:

  • Я хотел бы, чтобы он работал на Windows 7 или более поздней версии (хотя, если он работает на Windows XP, это бонус).
  • Я должен быть в состоянии сделать это на обычном компьютере без сценария, который должен быть текстом, который можно легко ввести с клавиатуры или скопировать / вставить.
  • Чем короче, тем лучше.

Поэтому, по сути, я хотел бы сценарий .cmd (пакетный), VBScript или PowerShell, который может выполнить загрузку. Он может использовать COM или вызывать Internet Explorer, но он должен работать без какого-либо ввода и должен вести себя хорошо при вызове без отображения (например, через сеанс Telnet ).

Джейсон Р. Кумбс
источник
dload v1.0 - инструмент командной строки win32, такой как wget superuser.com/a/833445/384998
seizu
Не дубликат, потому что этот вопрос специально ищет что-то, что будет работать на стандартной машине (без дополнительного программного обеспечения, такого как wget для Windows).
Джейсон Р. Кумбс
@ JasonR.Coombs Принятый ответ такой же, как один из ответов на этот вопрос, поэтому будущий читатель больше ничего не получит.
Франклин Ю
Я согласен; в этот момент более общий вопрос заменяет этот.
Джейсон Р. Кумбс

Ответы:

16

Если у вас PowerShell> = 3.0, вы можете использовать Invoke-WebRequest :

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

Или в гольф:

iwr -outf su.htm superuser.com
Стивен Пенни
источник
1
powershell -command "iwr -outf su.htm superuser.com"
Однострочник
14

Я хотел бы использовать биты ( учебник для начинающих ):

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.

Начиная с Windows 7, Microsoft рекомендует использовать командлеты PowerShell для BITS.

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

Вы также можете использовать биты через COM , см. Здесь пример VBScript . И есть битсадмин , инструмент командной строки для управления загрузками:

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

В Windows 7 bitsadmin.exeзаявляет, что это устаревший инструмент. тем не менее:

% bitsadmin.exe /transfer "NAME" http://path/to/file C:\Path\for\local\file
Акира
источник
2
Похоже, что теперь битсадмин устарел и может быть не включен в будущие версии Windows.
Джейсон Р. Кумбс
@ JasonR.Coombs: ссылка? ссылка?
Акира
2
technet.microsoft.com/en-us/magazine/ff382721.aspx ... так что вместо "bitadmin.exe" просто используются бит-командлеты.
Акира
1
Спасибо за это. Все, что мне нужно было сделать, это то, что битсадмин говорил мне, что он устарел, когда я его запускал.
Джейсон Р. Кумбс
обратите внимание, что
выходной
7

Попробуйте класс веб-клиента . Существует пример сценария PowerShell в нижней части этой страницы:

$c = new-object system.net.WebClient
$r = new-object system.io.StreamReader $c.OpenRead("http://superuser.com")
echo $r.ReadToEnd()
Чарльз Гарджент
источник
2
Это полезно Я обнаружил, что у WebClient также есть метод DownloadFile, который загружает контент прямо в файл. Благодарю.
Джейсон Р. Кумбс
3

Скопируйте и вставьте следующие шесть строк (или только последние четыре строки) в текстовый файл. Затем переименуйте его в 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

Очевидно, вам нужно настроить три вещи в этом скрипте, чтобы он работал на вас.

  1. Часть, которая говорит " http://www.exampleURL.com/FILE.TXT ". Вам нужно будет заменить правильный URL-адрес файла, который вы хотите загрузить.
  2. Команда, которую вы запустите в командной строке, чтобы выполнить этот скрипт; Вам нужно будет указать правильное имя для скрипта vget.vbs, если вы его так назвали.
  3. И имя, на FILE.TXTкоторое вы хотите, чтобы вывод направлялся в командной строке DOS .

Я только попытался использовать это для загрузки необработанного текстового файла ASCII (более мощный сценарий cmd) из моей учетной записи Dropbox , поэтому я не знаю, будет ли он работать для файлов EXE и т. Д .; или с других веб-серверов.

Если вы обойдетесь без первых двух строк комментариев, это будет всего четыре строки. Если вы знаете, как работать с VBScript, вы даже можете носить этот код в своей голове и вводить его в командной строке по мере необходимости. Он содержит только пять ключевых компонентов команды: CreateObject, .Open, .Send, WScript.Echoи .responseText.

ozidroid
источник
1

Вот моя попытка возобновить способы загрузки файла в Windows без использования внешних инструментов.

Он включает в себя BITSADMIN, Microsoft.XmlHTTP и WinHTTP с гибридным пакетным / JScript- скриптом, который не требует временных файлов, и System.Net.WebClinet с самоскомпилированным гибридом jscript.net.

npocmaka
источник