简介

批量文件下载器 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. C语言编写程序计算圆上的点的坐标

    Problem Description There is a cycle with its center on the origin. Now give you a point on the cycl ...

  2. testXSS <img src="aa" onerror="javascript:alert('XSS');"/>

    adsa  </p><img src="aa" onerror="javascript:alert('XSS');"/><p> ...

  3. CCS中cmd文件的编写

    http://blog.sina.com.cn/s/blog_abe5740601015b3q.html CMD的专业名称叫链接器配置文件,是存放链接器的配置信息的,我们简称为命令文件,其中比较关键的 ...

  4. canvas画布如何画图案例

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. easy-ui treegrid 实现分页 并且添加自定义checkbox

    首先第一点easy-ui  treegrid 对分页没有好的实现, 因为在分页的过程中是按照 根节点来分页的  后台只能先按照 根节点做分页查询  再将子节点关联进去, 这样才能将treegrid 按 ...

  6. 关于chrome密码保存框的神坑,这样子解决就行

  7. FFMPEG增加和提取字幕流

    转自 https://www.cnblogs.com/satng/p/5514683.html 防抽复制一遍 增加字幕流ffmpeg -i video.avi -i sub.ass -map 0:0 ...

  8. appium selenium.common.exceptions.WebDriverException: Message: Parameters were incorrect

    selenium.common.exceptions.WebDriverException: Message: Parameters were incorrect. We wanted {" ...

  9. 学以致用三十二-----python中函数的括号使用

    一直以来对python中函数括号的使用,有点分不清楚,到底什么时候用括号,什么时候不用括号,造成了很大看困惑. 今天来总结下. class aaa(): y = 'you' def __init__( ...

  10. Eclipse搭建SSH框架(Struts2+Spring+Hibernate)

    见识少的我经过一天多的研究才知道,在MyEclipse中搭好的框架的配置文件和jar包是通用的.接下来——亮剑! 工具:Eclipse+Tomcat+Mysql 一.先在Eclipse中配置好Tomc ...