简介

批量文件下载器 PowerShell 版,类似于迅雷批量下载功能,且可以破解 Referer 防盗链

源代码

[int]$script:completed = 0  # 下载完成数量
[int]$script:succeed = 0 # 下载成功数量 # 开始下载(普通方法)
function StartDownload {
param([array]$urlList, [string]$path, [string]$referer)
$last = $urlList.Count
$watch = Measure-Command {
for($i = 0; $i -lt $last; $i++) {
DownloadItem -url $urlList[$i] -path $path -referer $referer
Start-Sleep -Milliseconds 200 # 延迟0.2秒
}
}
$failed = $script:completed - $succeed
$elapsed = [Math]::Round($watch.TotalMilliseconds/1000, 2) # 总计耗时(秒)
Write-Output ""
Write-Host "总共下载 $script:completed,成功 $script:succeed,失败 $failed,耗时 $elapsed s" -ForegroundColor Red -BackgroundColor Yellow
$script:completed = 0
$script:succeed = 0
} # 下载单个文件
function DownloadItem {
param([string]$url, [string]$path, [string]$referer)
$url_file = $url.Substring($url.LastIndexOf('/') + 1);
if($referer.Contains("(*)")) {
$referer = $referer -replace "\(\*\)", $url
}
try {
$tmpFileName = [System.IO.Path]::GetTempFileName()
$destFileName = [System.IO.Path]::Combine($path, $url_file)
$watch = Measure-Command {
# 下载文件到临时文件夹
Invoke-WebRequest -Uri $url -Method Get -Headers @{"Referer"=$referer} -UserAgent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36" -TimeoutSec 120 -OutFile $tmpFileName
# 将临时文件移动到目标文件夹
Move-Item -Path $tmpFileName -Destination $destFileName -Force
}
$script:succeed += 1
$fileLength =[Math]::Ceiling((Get-Item -LiteralPath $destFileName).Length / 1024.0)
$elapsed = [Math]::Round($watch.TotalMilliseconds)
# 下载成功!12.jpg - 115KB/2356ms
Write-Host "下载成功!$url_file - $fileLength KB/$elapsed ms" -ForegroundColor Green
} catch {
Write-Error $PSItem.ToString()
} finally {
$script:completed += 1
}
} # 主函数 运行 AppStart 即可启动
function AppStart {
Clear-Host
Write-Welcome
$urlFormat = ReadInput_Url -message "输入URL(含通配符,例如 http://www.spany.com/2019/(*).jpg)"
$start = ReadInput_Integer -message "通配符数字开始(0~200)" -minValue 0 -maxValue 200
$end = $start + 200
$end = ReadInput_Integer -message "通配符数字结束($start~$end)" -minValue: $start -maxValue $end
$len = ReadInput_Integer -message "通配符数字长度(1~5)" -minValue: 1 -maxValue 5
$referer = ReadInput_Url -message "输入Referer为破解防盗链(如果Referer中含有通配符(*),则将被当前URL替换,如无须Referer则直接回车)" -defaultValue "https://www.baidu.com/visit"
Write-Output "" $urlList = BuildUrlList -urlFormat $urlFormat -start $start -end $end -len $len
if($urlList.Count -gt 0) {
Write-Output "URL列表如下:"
foreach($url in $urlList) {
Write-Output "`t$url"
}
Write-Output ""
if(ReadInput_YesOrNo -message "是否开始下载?(y/n)") {
$path = ReadInput_Path -message "输入文件存储目录"
Write-Output ""
StartDownload -urlList $urlList -path $path -referer $referer
}
} else {
Write-Warning "不能创建URL列表,请核对参数!"
}
Write-Output ""
} AppStart

完整代码: https://gitee.com/codefelix/spany-down-ps.git

如何使用

定位到文件目录,右键 spany-down-ps.ps1 选择“使用 PowerShell 运行”,如提示此系统上禁止运行脚本,可执行命令 Set-ExecutionPolicy -ExecutionPolicy Unrestricted 更改执行策略

也可以在 Windows PowerShell 工具,定位到脚本所在目录,通过 .\spany-down-ps.ps1 执行脚本

然后按照屏幕提示,输入必要参数,启动下载进程,截图演示下载某网站的美女写真集

如果你直接打开图片或者用迅雷批量下载,都将被 403 Forbidden,因为网站启用了 Referer 防盗链

不过 PowerShell 版还是单线程顺序下载,另一个 C#/.NET Core 版 https://gitee.com/codefelix/spany-down-sharp 采用异步下载,有进度显示,效率更高

PowerShell 实现批量下载文件的更多相关文章

  1. C#异步批量下载文件

    C#异步批量下载文件 实现原理:采用WebClient进行批量下载任务,简单的模拟迅雷下载效果! 废话不多说,先看掩饰效果: 具体实现步骤如下: 1.新建项目:WinBatchDownload 2.先 ...

  2. Java批量下载文件并zip打包

    客户需求:列表勾选需要的信息,点击批量下载文件的功能.这里分享下我们系统的解决方案:先生成要下载的文件,然后将其进行压缩,生成zip压缩文件,然后使用浏览器的下载功能即可完成批量下载的需求.以下是zi ...

  3. 批量下载文件web

    最近需要这个所以写了一个例子一般批量下载由以下步骤组成: 1.确定下载的源文件位置 2.对文件进行打包成临时文件,这里会用到递归调用,需要的嵌套的文件夹进行处理,并返回文件保存位置 3.将打包好的文件 ...

  4. java批量下载文件为zip包

    批量下载文件为zip包的工具类 package com.meeno.trainsys.util; import javax.servlet.http.HttpServletRequest; impor ...

  5. php批量下载文件

    最近用codeigniter开发一个图片网站,发现单文件下载很容易实现,批量下载的话,就有点麻烦. 普通php下载比较简单,比如我封装的一个函数: function shao_download($fi ...

  6. python_crawler,批量下载文件

    这个第一个python3网络爬虫,参考书籍是<python网络数据采集>.该爬虫的主要功能是爬取某个网站,并将.rar,.doc,.docx,.zip文件批量下载. 后期将要改进的是,用后 ...

  7. ASP.NET批量下载文件的方法

    一.实现步骤 在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存储所选文件的临时文件夹,将所选文件拷贝至临时文件夹.然后调用 RAR程序,对临时文件夹进行压缩,然后输出到 ...

  8. ASP.NET批量下载文件

    一.实现步骤 在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存储所选文件的临时文件夹,将所选文件拷贝至临时文件夹.然后调用 RAR程序,对临时文件夹进行压缩,然后输出到 ...

  9. 【197】PowerShell 通过 FTP 下载文件

    参考:使用 WGET 从FTP上下载文件 在 PowerShell 使用 wget2 工具,代码如下: wget2 ftp://user:password@192.168.14.31/1.jpg 其中 ...

随机推荐

  1. Android自动化之Monkey环境搭建(一)

    从事测试行业两年了,一直很喜欢研究新技术,但是最近有点慵懒.正好公司新出了产品,督促我学习monkey用来测其稳定性. 网上搜索了很久,内容总是很零散,通常需要找几篇文章才能搭好环境.特写此文,一篇文 ...

  2. txt 修改

    [61TECH_HEIBAILIUYI]#gaIcldGcyd7ducFc3deaRaOdAd4dPdMdaenc1chaeedeGcfcfeyd1cedhbidIcXcIdBdbdvdfcvbjdr ...

  3. vue项目中跳转到外部链接方法

    当我们在文件中,如果是vue页面中的内部跳转,可以用this.$router.push()实现,但是如果我们还用这种方法跳到外部链接,就会报错,我们一看链接的路径,原来是我们的外部链接前面加上了htt ...

  4. 基于xposed实现android注册系统服务,解决跨进程共享数据问题

    昨花了点时间,参考github issues 总算实现了基于xposed的系统服务注入,本文目的是为了“解决应用之间hook后数据共享,任意app ServiceManager.getService就 ...

  5. UVA 10944 Nuts for nuts..

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=21&p ...

  6. 第三次scrum作业

    一.第三次冲刺任务 ! 在已有的基础上实现图书馆管理员对图书信息的查询以及对图书借阅情况的查询. 二.用户故事 本次的用户是图书馆的管理员 用户输入对应的管理员的账号和密码 用户选择图书查询,进入图书 ...

  7. css摘要

    由于需要,今天花三个小时了解一下css,在此记录一些摘要: 参考w3school 1. 当同一个 HTML 元素被不止一个样式定义时,会使用哪个样式呢? 一般而言,所有的样式会根据下面的规则层叠于一个 ...

  8. C语言内存四区的学习总结(一)---- 静态区

    最近重新学习C语言相关知识,重新提到内存四区的概念,那么在之前的学习的基础上,在这儿做一个简单的总结与分享. 一.内存四区建立的流程 可以简单直观的查看下面的这个图片,直接的说明我们的程序在内存中是如 ...

  9. go语言的条件语句和循环语句

    一,条件语句 常见的就是if语句: 单支条件语句:     if   条件 :执行语句   (注,如果是没有逻辑运算符连接的话,是可以不需要括号的,也可以加上括号,如:if (条件):执行语句) 双支 ...

  10. 2019.03.12 codeforces739E. Gosha is hunting(dp凸优化)

    传送门 题意:nnn个物品,有aaa个XXX道具和bbb个YYY道具,XXX道具移走第iii个物品概率为pip_ipi​,YYY道具移走第iii个道具概率为uiu_iui​. 对于每个物品每种道具最多 ...