通过CMD下载Web内容

时间:2016-04-24 21:13:56

标签: windows batch-file cmd

我想要一些在命令提示符窗口(Windows CMD)上获取在线内容的方法。

想象一下,在线托管服务提供给您的托管服务或MySql数据库中存储的一些内容。它可以是以任何形式存储的任何数据。我只想在世界任何地方的CMD窗口的帮助下远程查看它。我应该使用什么命令?

为了更清楚,让我们假设您有一天准备考试。你没有做好准备,而是制定了欺骗计划。

现在,您的考试将在分配给您的计算机上进行,您不能使用浏览器或在PC上下载任何新应用程序。但是你可以使用命令提示符,所以你的任务是作弊是将答案放在网上某处。你无法安装任何新东西。

如果你被困在上面的场景中你会怎么做?

P.S这仅用于教育目的。我没有这样的考试。

5 个答案:

答案 0 :(得分:4)

You can check this question。最简单的方法是使用bitsadmin命令:

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

您还可以尝试winhttpjs.bat

call winhhtpjs.bat https://example.com/files/some.zip -saveTo c:\somezip.zip

答案 1 :(得分:2)

完全取决于内容的存储和访问方式。 CMD知道如何从SMB网络共享(\ computername \文件夹)中获取内容,但是您需要运行程序来访问大多数其他内容。 (例如:sqlcmd表示数据库)

CMD不支持下载网页内容。您需要使用其他程序连接到网站并下载页面。显然浏览器会起作用。另一种方法是从UnxUtils下载wget.exe。或者使用其他脚本语言,例如 PowerShell Wscript

如果您有权启动PowerShell(预装在Windows 7-10上),则可以使用.NET库下载Web资源。

PS> Invoke-Webrequest 'www.mywebsite.com/myfile.txt' -OutFile '.\myfile.txt'

这将使用.NET连接到页面并将其下载到本地目录中。要下载到另一个目录或文件名,请更改-OutFile参数。

要从CMD启动此功能,只需在CMD中键入powershell并从那里运行PS命令,即可进入PowerShell提示符。或者,您可以使用powershell -c命令从CMD运行PS命令。

powershell.exe -c "invoke-webrequest 'www.mywebsite.com/myfile.txt' -outfile .\myfile.txt"

答案 2 :(得分:1)

Set Arg = WScript.Arguments
set WshShell = createObject("Wscript.Shell")
Set Inp = WScript.Stdin
Set Outp = Wscript.Stdout
On Error Resume Next
    Set File = WScript.CreateObject("Microsoft.XMLHTTP")
    File.Open "GET", Arg(1), False
    File.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C; .NET4.0E; BCD2000; BCD2000)"
    File.Send
    txt=File.ResponseText
    'Putting in line endings
    Outp.write txt
    If err.number <> 0 then 
        Outp.writeline "" 
        Outp.writeline "Error getting file" 
        Outp.writeline "==================" 
        Outp.writeline "" 
        Outp.writeline "Error " & err.number & "(0x" & hex(err.number) & ") " & err.description 
        Outp.writeline "Source " & err.source 
        Outp.writeline "" 
        Outp.writeline "HTTP Error " & File.Status & " " & File.StatusText
        Outp.writeline  File.getAllResponseHeaders
        Outp.writeline LCase(Arg(1))
    End If

一般用途

过滤器用于命令提示符。必须使用cscript.exe运行Filter.vbs。如果您只是输入过滤器,它将运行一个自动执行此操作的批处理文件。

filter subcommand [parameters]

仅对标准输入和标准输出进行读写。这些仅在命令提示符中可用。

filter <inputfile >outputfile
filter <inputfile | other_command
other_command | filter >outputfile
other_command | filter | other_command

网络

filter web webaddress
filter ip webaddress

从网络中检索文件并将其写入标准输出。

webaddress - a web address fully specified including http://

示例

获取Microsoft的主页

filter web http://www.microsoft.com

使用https://onedrive.live.com/redir?resid=E2F0CE17A268A4FA!121&authkey=!AAFg7j814-lJtmI&ithint=folder%2cres

中的19个示例命令提示符脚本进行过滤

答案 3 :(得分:0)

除了VBScript和JScripts,Windows上还有一个实用程序(驻留在CMD中),可以从CMD运行(如果您具有写权限):

set url=https://www.nsa.org/content/hl-images/2017/02/09/NSA.jpg
set file=file.jpg
certutil -urlcache -split -f %url% %file%

Powershell中的cmdlet:

$url = "https://www.nsa.org/content/hl-images/2017/02/09/NSA.jpg"
$file = "file.jpg"
$ProgressPreference = "SilentlyContinue";
Invoke-WebRequest -Uri $url -outfile $file

.Net在PowerShell下:

$url = "https://www.nsa.org/content/hl-images/2017/02/09/NSA.jpg"
$file = "file.jpg"
# Add the necessary .NET assembly
Add-Type -AssemblyName System.Net.Http
# Create the HttpClient object
$client = New-Object -TypeName System.Net.Http.Httpclient
$task = $client.GetAsync($url)
$task.wait();
[io.file]::WriteAllBytes($file, $task.Result.Content.ReadAsByteArrayAsync().Result)

使用csc.exe在命令行上构建的C#应用​​程序:

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/command-line-building-with-csc-exe

using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;

namespace DownloadImage
{
    class Program
    {
        static async Task Main(string[] args)
        {
            using var httpClient = new HttpClient();
            var url = "https://www.nsa.org/content/hl-images/2017/02/09/NSA.jpg";
            byte[] imageBytes = await httpClient.GetByteArrayAsync(url);

            using var fs = new FileStream("file.jpg", FileMode.Create);
            fs.Write(imageBytes, 0, imageBytes.Length);

        }
    }
}

内置于Windows应用程序中。无需外部下载。

在Win 10上测试

答案 4 :(得分:0)

Windows 10 内部版本 17063 及更高版本提供 curl.exe(参考:https://techcommunity.microsoft.com/t5/containers/tar-and-curl-come-to-windows/ba-p/382409)。假设您不需要支持早期的 Windows 版本,包括早期的 Windows 10 版本,您可以像这样在批处理文件中使用它

curl http://example.com/ --output content.txt
notepad content.txt