如何使此PHP脚本更快/异步运行?

时间:2018-11-24 11:20:08

标签: php regex curl php-curl pastebin

我有一个pastebin scraper脚本,该脚本旨在查找泄漏的电子邮件和密码,以创建类似HaveIBeenPwned的网站。

这是我的脚本正在做的事情:
-抓取https://psbdmp.ws/dumps中的Pastebin链接
-使用此随机代理API获取随机代理(因为如果您处理过多请求,Pastebin会禁止您的IP):https://api.getproxylist.com/proxy
-对Pastebin链接进行CURL请求,然后进行preg_match_all查找格式为email:password的所有电子邮件地址和密码。

实际的脚本似乎可以正常运行,但是还不够优化,并且在一段时间后给了我524超时错误,我怀疑是因为所有这些CURL请求。

这里是我的代码:
api.php

    function comboScrape_CURL($url) {
    // Get random proxy
    $proxies->json = file_get_contents("https://api.getproxylist.com/proxy");
    $proxies->decoded = json_decode($proxies->json);
    $proxy = $proxies->decoded->ip.':'.$proxies->decoded->port;
    list($ip,$port) = explode(':', $proxy);

    // Crawl with proxy
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_PROXY, $proxy);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    $curl_scraped_page = curl_exec($ch);
    curl_close($ch);
    comboScrape('email:pass',$curl_scraped_page);
}

index.php

require('api.php');
$expression = "/(?:https\:\/\/pastebin\.com\/\w+)/";

$extension = ['','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20'];
foreach($extension as $pge_number) {
    $dumps = file_get_contents("https://psbdmp.ws/dumps/".$pge_number);
    preg_match_all($expression,$dumps,$urls);
    $codes = str_replace('https://pastebin.com/','',$urls[0]);
    foreach ($codes as $code) {
        comboScrape_CURL("https://pastebin.com/raw/".$code);
    }
}

1 个答案:

答案 0 :(得分:0)

524 timeout error-错误,看来您是在Web服务器后面运行php(apache?nginx?lighthttpd?IIS?)不要这样做,而是从php-cli运行代码,php-cli可以无限期运行,永不超时。

because Pastebin bans your IP if you hammer too many requests-改为购买pastebin.com专业帐户(https://pastebin.com/pro),费用约为50美元(圣诞节和黑色星期五前后约为20美元),并且是终身帐户,需要一次性付款,并允许您访问抓取api(https://pastebin.com/doc_scraping_api),使用抓取api每秒可以获取大约1个粘贴,或者每天获取86400个粘贴,而不会出现ip被禁止的情况。

并且由于pastebin.com的速率限制,不需要通过多个连接异步进行此操作(有可能,但不值得麻烦。如果您实际需要这样做,则必须使用{ {3}})