目录扫描编写
Posted FireC@t @ Perl6
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了目录扫描编写相关的知识,希望对你有一定的参考价值。
1. 目录字典 2. HTTP::UserAgent 3. Start创建线程数(也可以用Proc::Async)
先创建一个导入字典的函数:
sub MAIN (Str $dict) { #判断是否是文件 if $dict.IO.f { #不要把文件一次进数组, 一行一行读就行 for $dict.IO.lines -> $line { say $line; } }else { say $dict~‘ Not exists or not a file!‘; #不是文件或不存在就提示 } }
这样我们就能编历一个字典文件。
我们再设置用户传入一个 url或ip:
sub MAIN (Str $ip, Str $dict) { # #判断是否是文件 if $dict.IO.f { #不要把文件一次进数组, 一行一行读就行 for $dict.IO.lines -> $line { #拼接url say $ip~‘/‘~$line; } }else { say $dict~‘ Not exists or not a file!‘; #不是文件或不存在就提示 } }
注意, 这里的 url我们没有检测是否输入合法。我们这里没有写测试函数。
再导入 HTTP::UserAgent 来访问 url:
use HTTP::UserAgent; sub MAIN (Str $ip, Str $dict) { # #判断是否是文件 if $dict.IO.f { #不要把文件一次进数组, 一行一行读就行 for $dict.IO.lines -> $line { #拼接url my $ua = HTTP::UserAgent.new; my $target = $ip~‘/‘~$line; my $html = $ua.get($target); #查看状态码 say $html.status-line; } }else { say $dict~‘ Not exists or not a file!‘; #不是文件或不存在就提示 } }
我们把结果保存到一个文件:
use HTTP::UserAgent; my $fp = open ‘result.txt‘, :w; sub MAIN (Str $ip, Str $dict) { # #判断是否是文件 if $dict.IO.f { #不要把文件一次进数组, 一行一行读就行 for $dict.IO.lines -> $line { #拼接url my $ua = HTTP::UserAgent.new; my $target = $ip~‘/‘~$line; say ‘Fetch: ‘~$target; my $html = $ua.get($target); #查看状态码 #say $html.status-line; $fp.say($target => $html.status-line); } }else { say $dict~‘ Not exists or not a file!‘; #不是文件或不存在就提示 } }
我们准备创一个多线程的, 用start包住代码块, 再设置一个数组控制线程数量即可:
use HTTP::UserAgent; my $fp = open ‘result.txt‘, :w; my @threads; #控制线程数目 sub MAIN (Str $ip, Str $dict) { # #判断是否是文件 if $dict.IO.f { #不要把文件一次进数组, 一行一行读就行 for $dict.IO.lines -> $line { push @threads, start { #拼接url my $ua = HTTP::UserAgent.new; my $target = $ip~‘/‘~$line; say ‘Fetch: ‘~$target; my $html = $ua.get($target); #查看状态码 #say $html.status-line; $fp.say($target => $html.status-line); }; #控制线程 数 if @threads == 4 { await @threads; @threads = []; } } }else { say $dict~‘ Not exists or not a file!‘; #不是文件或不存在就提示 }
await @threads; }
现在还有一个问题就是, 文件同时写入保存时, 可能会有问题, 我们最后加一个写 的Lock就行:
未完
以上是关于目录扫描编写的主要内容,如果未能解决你的问题,请参考以下文章
Android zxing Journeyapps 条码扫描器内部片段