Как проверить прокси с помощью multiCurl и Php Curl Class?

Пытаюсь проверить через multiCurl и PHP Curl Class (https://github.com/php-curl-class/php-curl-class) прокси.
Проблема в том, что не могу задать индивидуальный прокси для каждого процесса multiCurl.

Если использовать запускать последовательно циклы на проверку, то все работает отлично.

Подскажите, где я ошибся, пожалуйста:

<?php

require __DIR__ . '/vendor/autoload.php';

/**
 * @param $url
 */

ini_set('max_execution_time', 600);
ini_set("display_errors",1);
error_reporting(E_ALL);

use \Curl\Curl;
use \Curl\MultiCurl;

function proxy_parser ($url){


    $curl = new Curl();

    $curl->get($url);

    $curl->setOpt(CURLOPT_FOLLOWLOCATION, true);
    $curl->setOpt(CURLOPT_SSL_VERIFYHOST, false);
    $curl->setOpt(CURLOPT_SSL_VERIFYPEER, false);
    $curl->setOpt(CURLOPT_CONNECTTIMEOUT, 10);
    $curl->setOpt(CURLINFO_HEADER_OUT, true);




    $proxy_result = explode("\n", $curl->response);
//    echo 'Response:' . "\n";
//    var_dump($proxy_result);


    /* Multicurl */
    $multi_curl = new MultiCurl();


    /* Проверка прокси */
    $check_url = 'http://httpbin.org/get';

    foreach($proxy_result as $key => $val)

    {
        $multi_curl->beforeSend(function ($instance) use ($proxy_result) {
            foreach ($proxy_result as $key => $val) {
        $instance->setProxy($val);
        $instance->setProxyType(CURLPROXY_SOCKS5);
        $instance->setProxyTunnel();
        $instance->setConnectTimeout(5);
        $instance->setTimeout(10);
        $instance->setOpt(CURLOPT_FOLLOWLOCATION, true);
        $instance->setOpt(CURLOPT_SSL_VERIFYHOST, false);
        $instance->setOpt(CURLOPT_SSL_VERIFYPEER, false);}});

        $multi_curl->addGet($check_url);


        /*$curl = new Curl();


        $curl->setProxy($val);
        $curl->setProxyType(CURLPROXY_SOCKS5);
        $curl->setProxyTunnel();
        $curl->setConnectTimeout(5);
        $curl->setTimeout(10);


        $curl->setOpt(CURLOPT_FOLLOWLOCATION, true);
        $curl->setOpt(CURLOPT_SSL_VERIFYHOST, false);
        $curl->setOpt(CURLOPT_SSL_VERIFYPEER, false);
        $curl->get($check_url);*/
        //$ip = ($curl->response->origin);
        //echo $ip;







//        if (strpos($proxyResponse, 'ХХХ') !== false)
//        {
//            $url_str = $val;
//            $fd = fopen("proxies.txt", 'a') or die("не удалось создать файл");
//            fwrite($fd, $url_str .PHP_EOL);
//            fclose($fd);
//        }
//        else
//        {
//            continue;
//
//        }// end if
    }

    $multi_curl->success(function($instance) {
        $ip = ($instance->response->origin);
        echo $ip;
//        echo 'call to "' . $proxy_result->url . '" was successful.' . "\n";
//        echo '<pre>' . var_dump($proxy_result->getRequestHeaders) . '</pre>';
    });
    $multi_curl->start();
    //$ip = ($proxy_result->response->origin);
    //echo $ip;
    //var_dump($multi_curl);

    die();



}

$url = 'https://api.proxyscrape.com/?request=displayproxies&proxytype=socks5&timeout=1000&anonymity=elite&ssl=yes&limit=200';
//$url = 'http://pubproxy.com/api/proxy?last_check=1&format=txt&level=anonymous&speed=10&limit=5&https=true&user_agent=true&cookies=true&referer=true';



do {
    proxy_parser ($url);
    $file = file('proxies.txt');
    $number_proxies = sizeof($file);
    str_pad('', 4096, "\n");
    sleep(2);
} while ($number_proxies < 50);

echo "Прокси успешно спаршены";
  • Вопрос задан
  • 354 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы