• Как определить страну прокси, убрать Китайские прокси и полностью перезаписать файл финальным результатом?

    mik777em
    @mik777em Автор вопроса
    А скрипт обрабатывается с ошибкой.
    У меня вот эта строка вызывает сомнения
    _check_socks5 ($socks5_list, dirname(__FILE__)."/socks5_valid.txt");


    Тут всё верно?
  • Как определить страну прокси, убрать Китайские прокси и полностью перезаписать файл финальным результатом?

    mik777em
    @mik777em Автор вопроса
    скрипт запускается на cron у хостингера beget. Саппорт бегета говорит что расширение установлено:
    5ea98c78cce03751176298.png

    Ссылки на расширения которые установлены на разных версиях php в этом сервере (5.2 5.3 5.6 7.0 7.1 7.2 7.3)
    https://astral.beget.com/phpinfo.php?v=52
    https://astral.beget.com/phpinfo.php?v=53
    https://astral.beget.com/phpinfo.php?v=56
    https://astral.beget.com/phpinfo.php?v=70
    https://astral.beget.com/phpinfo.php?v=71
    https://astral.beget.com/phpinfo.php?v=72
    https://astral.beget.com/phpinfo.php?v=73



    5ea98d3d5cb91046633837.png
  • Как определить страну прокси, убрать Китайские прокси и полностью перезаписать файл финальным результатом?

    mik777em
    @mik777em Автор вопроса
    Где-то ошибка в коде, не могу понять. Не обрабатывается даже.

    Запуск в Cron
    5ea8cc4354433690563040.png

    Запуск в браузере:

    5ea8cc255af72649021749.png

    Использовал этот код (не менял ничего в коде что вы дали)
    <?php
     $socks5_list = explode ("\n", str_replace ("\r", "", file_get_contents (dirname(__FILE__)."/gotovo_vse_sellery_bezdybley.txt")));
    if (empty($socks5_list))
    {
        exit(1);
    }
     function _check_socks5 ($socks = array(), $filename)
     {
      foreach ($socks as $s)
      {
       list ($ip, $port) = explode (":", $s);
       if (geoip_country_code_by_name($ip) == "CN") continue;
       if ($socket = @fsockopen ($ip, $port, $errno, $errstr, 1))
       {
        $threads[$s] = $socket;
       }
      }
      foreach ($threads as $s => $h)
      {
       fwrite ($h, "\x05\x01\x00");
      }
      foreach ($threads as $s => $h)
      {
       $r = fread ($h, 2);
       if ((ord ($r [0]) == 5) && (ord ($r [1]) == 0))
       {
        file_put_contents ($filename, $s."\r\n");
       }
      }
     }
     _check_socks5 ($socks5_list, dirname(__FILE__)."/socks5_valid.txt");
    ?>
  • В чем причина, что мой чекер проксей не чекает из исходного списка - socks5 прокси?

    mik777em
    @mik777em Автор вопроса
    Я задал этот вопрос так как проверил скрипт на 3-х сайтах (http - юрлах):

    1) http://google.com                -->  результат: http=36шт || https=320шт || socks5=5шт || socks4=1шт
    2) http://2ip.ru                    -->  результат: http=38шт || https=325шт || socks5=0шт || socks4=0шт  
    3) http://poc*******.ru/sample-page -->  результат: http=22шт || https=196шт || socks5=0шт || socks4=0шт

    3тий юрл - это мой сайт на WP.
    В нём стоит 301 редирект http --> https
  • Как добавить к чекингу HTTPS и HTTP еще и проверку и выдачу SOCKS5 проксей?

    mik777em
    @mik777em Автор вопроса
    AUser0, конечно отвечу, я умею отвечать добром на добро! Мне этот чекер нужен для ютуба, поэтому я поставил сайт гугла https://google.com. Так может сразу воткнуть url: https://www.youtube.com , или это тот же гугл со своей капчей?)
  • Как добавить к чекингу HTTPS и HTTP еще и проверку и выдачу SOCKS5 проксей?

    mik777em
    @mik777em Автор вопроса
    AUser0,
    могу конечно!)
    Но теперь скрипт не чекает прокси (файл 2_results.txt - пустой )
    Поменял 
        curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
    на
        curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, CURLPROXY_HTTPS);


    Поменял
        curl_setopt ($c [$thread_no], CURLOPT_URL, "http://google.com");
    
    на
    
        curl_setopt ($c [$thread_no], CURLOPT_URL, "https://google.com");


    Скрипт:
    <?php
    $proxies = file ("1_ne_check.txt");
    if (empty($proxies))
    {
        exit(1);
    }
    
    $mc = curl_multi_init ();
    for ($thread_no = 0; $thread_no<count ($proxies); $thread_no++)
    {
        $c [$thread_no] = curl_init ();
        curl_setopt ($c [$thread_no], CURLOPT_URL, "https://google.com");
        curl_setopt ($c [$thread_no], CURLOPT_HEADER, 0);
        curl_setopt ($c [$thread_no], CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($c [$thread_no], CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt ($c [$thread_no], CURLOPT_TIMEOUT, 10);
        curl_setopt ($c [$thread_no], CURLOPT_PROXY, trim ($proxies [$thread_no]));
        curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, CURLPROXY_HTTPS);
        curl_multi_add_handle ($mc, $c [$thread_no]);
    }
     
    $proxies_out = array();
    do {
        while (($execrun = curl_multi_exec ($mc, $running)) == CURLM_CALL_MULTI_PERFORM);
        if ($execrun != CURLM_OK) break;
        while ($done = curl_multi_info_read ($mc))
        {
            $info = curl_getinfo ($done ['handle']);
            if ($info ['http_code'] == 301) {
                echo trim ($proxies [array_search ($done['handle'], $c)])."\r\n";
                $proxies_out[trim($proxies[array_search($done['handle'], $c)])] = trim($proxies[array_search($done['handle'], $c)]);
                unset($proxies[array_search ($done['handle'], $c)]);
            }
            curl_multi_remove_handle ($mc, $done ['handle']);
        }
    } while ($running);
    curl_multi_close ($mc);
    
    $mc = curl_multi_init ();
    for ($thread_no = 0; $thread_no<count ($proxies); $thread_no++)
    {
        $c [$thread_no] = curl_init ();
        curl_setopt ($c [$thread_no], CURLOPT_URL, "https://google.com");
        curl_setopt ($c [$thread_no], CURLOPT_HEADER, 0);
        curl_setopt ($c [$thread_no], CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($c [$thread_no], CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt ($c [$thread_no], CURLOPT_TIMEOUT, 10);
        curl_setopt ($c [$thread_no], CURLOPT_PROXY, trim ($proxies [$thread_no]));
        curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
        curl_multi_add_handle ($mc, $c [$thread_no]);
    }
     
    $proxies5_out = array();
    do {
        while (($execrun = curl_multi_exec ($mc, $running)) == CURLM_CALL_MULTI_PERFORM);
        if ($execrun != CURLM_OK) break;
        while ($done = curl_multi_info_read ($mc))
        {
            $info = curl_getinfo ($done ['handle']);
            if ($info ['http_code'] == 301) {
                echo trim ($proxies [array_search ($done['handle'], $c)])."\r\n";
                $proxies5_out[trim($proxies[array_search($done['handle'], $c)])] = trim($proxies[array_search($done['handle'], $c)]);
            }
            curl_multi_remove_handle ($mc, $done ['handle']);
        }
    } while ($running);
    curl_multi_close ($mc);
    
    file_put_contents("2_results.txt", implode("\r\n", $proxies_out)."\r\n\r\n".implode("\r\n", $proxies5_out));
    ?>
  • Как добавить к чекингу HTTPS и HTTP еще и проверку и выдачу SOCKS5 проксей?

    mik777em
    @mik777em Автор вопроса
    Спасибо за исправление. Но вот тут вы указали HTTP , в таком случае ( если я не ошибаюсь) он будет собирать прокси типа: HTTP , мне они не нужны. может там нужно поставить HTTPS ?
    ==============================================================
    5e9f86b4105b0143806082.png
    ====================

    Далее по коду вижу что будет еще брать SOCKS5 , там вроде норм все.
    Напомню, что мне нужны только HTTPS и SOCKS5
  • Как чекать и сохранять несколько типов проксей в txt файл используя curl_multi?

    mik777em
    @mik777em Автор вопроса
    Дмитрий,
    Ниже добавил код скрипта.
    Я так понимаю проблема в том что каждый последующий CURLOPT_PROXYTYPE затиает предыщущий и в результате используется самый крайний CURLOPT_PROXYTYPE
    curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
    curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
    curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, CURLPROXY_HTTP);

    Гуглил много, но нигде не нашел чтоб использовали в одном курл мульти несколько типов проксей .

    Поэтому, готов за деньги чтоб мне помогли.

    Весь код скрипта
    <?php
    $proxies = file ("1_ne_check.txt");
    if (empty($proxies))
    {
        exit(1);
    }
    $proxies_out = array();
    $mc = curl_multi_init ();
    for ($thread_no = 0; $thread_no<count ($proxies); $thread_no++)
    {
    $c [$thread_no] = curl_init ();
    curl_setopt ($c [$thread_no], CURLOPT_URL, "http://google.com");
    curl_setopt ($c [$thread_no], CURLOPT_HEADER, 0);
    curl_setopt ($c [$thread_no], CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($c [$thread_no], CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt ($c [$thread_no], CURLOPT_TIMEOUT, 10);
    curl_setopt ($c [$thread_no], CURLOPT_PROXY, trim ($proxies [$thread_no]));
    curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
    curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
    curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
    curl_multi_add_handle ($mc, $c [$thread_no]);
    }
     
    do {
    while (($execrun = curl_multi_exec ($mc, $running)) == CURLM_CALL_MULTI_PERFORM);
    if ($execrun != CURLM_OK) break;
    while ($done = curl_multi_info_read ($mc))
    {
    $info = curl_getinfo ($done ['handle']);
    if ($info ['http_code'] == 301) {
    echo trim ($proxies [array_search ($done['handle'], $c)])."\r\n";
    $proxies_out[trim($proxies[array_search($done['handle'], $c)])] = trim($proxies[array_search($done['handle'], $c)]);
    }
    curl_multi_remove_handle ($mc, $done ['handle']);
    }
    } while ($running);
    curl_multi_close ($mc);
    file_put_contents("2_results.txt", implode("\r\n", $proxies_out));
    ?>
  • Как чекать и сохранять несколько типов проксей в txt файл используя curl_multi?

    mik777em
    @mik777em Автор вопроса
    В тостере я детально указывал суть проблемы и приводил код скрипта в другом вопросе Как добавить к чекингу HTTPS и HTTP еще и проверку и выдачу SOCKS5 проксей? , но никто бесплатно не помог. Поэтому предлагаю взять у меня оплачиваемый заказ по чекеру на php.
  • Как чекать и сохранять несколько типов проксей в txt файл используя curl_multi?

    mik777em
    @mik777em Автор вопроса
    в вопросе я указал, что за деньги исправьте мой скрипт.
  • Как добавить к чекингу HTTPS и HTTP еще и проверку и выдачу SOCKS5 проксей?

    mik777em
    @mik777em Автор вопроса
    zlo1 или же это лишние костыли? Подскажите пожалуйста куда копать? Я только начинаю изучать php)
  • Как добавить к чекингу HTTPS и HTTP еще и проверку и выдачу SOCKS5 проксей?

    mik777em
    @mik777em Автор вопроса
    zlo1 Да, я знаю что тип прокси определяется портом и что определенному типу проксей соответствует определенный порт.

    И что, например у прокси типа socks5 - список таких портов ОГРОМЕН!, так же огромен список портов и у других типов проксей - http(s), сокс4(а)

    У хотел всю кашу проксей, которая есть в файле 1_ne_check.txt (в котором в перемешку есть все типы проксей), пройти их поочередно 2 раза...... двумя скриптами. Сначала скриптом с параметром CURLPROXY_SOCKS5 , затем скриптом с параметром CURLPROXY_HTTPS.

    Таким образом, каждый скрипт со своим параметром будет выдерать только свой тип прокси из файла 1_ne_check.txt и 2 этих скрипта буду сохранять в конец файла 2_results.txt прокси только своего типа.
    Прошу прощения за мою неграмотность в PHP и curl_multi в частности).
  • Как добавить к чекингу HTTPS и HTTP еще и проверку и выдачу SOCKS5 проксей?

    mik777em
    @mik777em Автор вопроса
    Так может в рамках одного скрипта сделать, чтоб скрипт сначала
    проходил список с параметром
    curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);

    и сохранял в файл
    Затем по тому же исходному списку проходил с параметром
    curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, CURLPROXY_HTTPS);

    и сохранял в файл, но не затирая результаты первого сохранения, а вставлял свои результаты ниже первых результатов.

    затем всё тоже самое для:
    curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);


    Так работать будет?
  • Как добавить к чекингу HTTPS и HTTP еще и проверку и выдачу SOCKS5 проксей?

    mik777em
    @mik777em Автор вопроса
    zlo1, добавил в одно:

    <?php
    $proxies = file ("1_ne_check.txt");
    if (empty($proxies))
    {
        exit(1);
    }
    $proxies_out = array();
    $mc = curl_multi_init ();
    for ($thread_no = 0; $thread_no<count ($proxies); $thread_no++)
    {
    $c [$thread_no] = curl_init ();
    curl_setopt ($c [$thread_no], CURLOPT_URL, "http://google.com");
    curl_setopt ($c [$thread_no], CURLOPT_HEADER, 0);
    curl_setopt ($c [$thread_no], CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($c [$thread_no], CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt ($c [$thread_no], CURLOPT_TIMEOUT, 10);
    curl_setopt ($c [$thread_no], CURLOPT_PROXY, trim ($proxies [$thread_no]));
    curl_setopt($c[$thread_no], CURLOPT_PROXYTYPE, CURLPROXY_HTTPS, CURLPROXY_SOCKS5_HOSTNAME, CURLPROXY_SOCKS5);
    curl_multi_add_handle ($mc, $c [$thread_no]);
    }
     
    do {
    while (($execrun = curl_multi_exec ($mc, $running)) == CURLM_CALL_MULTI_PERFORM);
    if ($execrun != CURLM_OK) break;
    while ($done = curl_multi_info_read ($mc))
    {
    $info = curl_getinfo ($done ['handle']);
    if ($info ['http_code'] == 301) {
    echo trim ($proxies [array_search ($done['handle'], $c)])."\r\n";
    $proxies_out[trim($proxies[array_search($done['handle'], $c)])] = trim($proxies[array_search($done['handle'], $c)]);
    }
    curl_multi_remove_handle ($mc, $done ['handle']);
    }
    } while ($running);
    curl_multi_close ($mc);
    file_put_contents("2_results.txt", implode("\r\n", $proxies_out));
    ?>
  • Как добавить к чекингу HTTPS и HTTP еще и проверку и выдачу SOCKS5 проксей?

    mik777em
    @mik777em Автор вопроса
    Где-то в коде ошибка. Какой же в коде нюанс не дает сохранять только socks5 и https ?

    Проверил только что, но всё равно выдаёт только http и https прокси:
    2_results.txt

    36.80.160.237:8080
    36.76.149.57:8080
    45.14.137.63:8080
    36.76.221.55:8888
    200.89.178.225:3128
    180.252.95.189:8080
    118.99.88.29:3128
    124.122.231.59:8080
    134.236.160.130:8080
    101.109.58.45:8080
    178.128.56.140:8989
    180.245.186.212:8080
    180.246.248.115:8080
    124.121.153.115:8080
    36.90.135.47:8080
    187.131.140.94:8080
    124.121.124.20:8080
    116.58.247.135:8080
    136.169.139.11:8080
    178.130.87.135:8080
    188.210.250.212:8080
    148.255.159.204:999
    36.68.179.170:8080
    46.246.80.99:8118
    183.88.131.252:8080
    180.183.26.34:8080
    36.83.17.184:8080
    149.28.98.219:3128
    58.8.195.53:8213
    45.77.113.182:3128
    182.253.168.162:3128
    5.255.25.198:9090
    125.162.117.238:8080

    101.108.127.3:8080
    5.255.18.18:8080
    171.101.130.45:8080
    178.93.30.220:59341
    109.111.139.4:53281
    178.252.80.226:35566
    213.246.7.118:8080
    49.49.73.5:8080
    1.0.180.62:8080
    187.190.255.158:999
    31.204.101.85:53281
    88.135.90.252:8080
    160.0.219.233:8080
    134.35.46.58:9090
    125.160.129.221:8080
    165.255.207.71:8080
    113.53.145.115:8080
    45.32.123.145:3128
    125.25.89.140:8080
    166.98.140.50:8080
    170.247.202.131:8080
    36.90.164.166:3128
    165.255.97.235:8080
    117.204.253.120:8080
    46.246.63.17:8118
    101.109.131.3:8080
    159.192.158.106:8080
    91.215.195.143:34414
    183.89.144.120:8080
    36.78.123.240:8080
    178.213.130.101:52658
    124.122.9.91:8213
    125.166.231.99:8080
    190.183.244.199:999
    128.199.252.41:44344
    36.90.58.87:8080
    180.210.201.57:3130
    34.249.53.25:8080
    183.89.47.200:8080
    178.93.28.171:44432
    125.24.131.61:8080
    180.248.103.24:8080
    102.165.69.88:8080
    177.41.73.173:8080
    183.88.62.213:8213
    118.174.46.162:8080
    5.167.11.176:8080
    177.73.54.110:8080
    128.199.251.160:44344
    183.88.130.65:8080
    124.121.239.239:8080
    185.64.209.155:53281
    165.22.106.66:44344
    61.7.132.170:8080
    14.207.207.228:8080
    87.202.18.195:8080
    101.109.36.207:8080
    125.162.194.151:8080
    78.85.176.7:8080
    182.253.173.138:8080
    36.90.185.228:8081
    139.5.133.158:8080
    36.88.12.85:8080
    103.220.47.113:8080
    116.58.239.28:53281
    188.209.239.181:9090
  • Как добавить к чекингу HTTPS и HTTP еще и проверку и выдачу SOCKS5 проксей?

    mik777em
    @mik777em Автор вопроса
    Cod.it,
    Теперь верно указал? поменял с http на https
    Заранее простите за нубские вопросы.
    споилер что поменял
    5e9d8fd790191714279676.png


    <code lang="php">
    <?php
    $proxies = file ("1_ne_check.txt");
    if (empty($proxies))
    {
        exit(1);
    }
    $proxies_out = array();
    $mc = curl_multi_init ();
    for ($thread_no = 0; $thread_no<count ($proxies); $thread_no++)
    {
    $c [$thread_no] = curl_init ();
    curl_setopt ($c [$thread_no], CURLOPT_URL, "http://google.com");
    curl_setopt ($c [$thread_no], CURLOPT_HEADER, 0);
    curl_setopt ($c [$thread_no], CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($c [$thread_no], CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt ($c [$thread_no], CURLOPT_TIMEOUT, 10);
    curl_setopt ($c [$thread_no], CURLOPT_PROXY, trim ($proxies [$thread_no]));
    curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
    curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
    curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, CURLPROXY_HTTPS);
    curl_multi_add_handle ($mc, $c [$thread_no]);
    }
     
    do {
    while (($execrun = curl_multi_exec ($mc, $running)) == CURLM_CALL_MULTI_PERFORM);
    if ($execrun != CURLM_OK) break;
    while ($done = curl_multi_info_read ($mc))
    {
    $info = curl_getinfo ($done ['handle']);
    if ($info ['http_code'] == 301) {
    echo trim ($proxies [array_search ($done['handle'], $c)])."\r\n";
    $proxies_out[trim($proxies[array_search($done['handle'], $c)])] = trim($proxies[array_search($done['handle'], $c)]);
    }
    curl_multi_remove_handle ($mc, $done ['handle']);
    }
    } while ($running);
    curl_multi_close ($mc);
    file_put_contents("2_results.txt", implode("\r\n", $proxies_out));
    ?>
    </code>
  • Как изменить наcтройки Python проекта "ProxyBroker" для парсинга и чека прокси и заставить его работать бесконечно?

    mik777em
    @mik777em Автор вопроса
    он (как в инструкции указано) имеет 50+ источников откуда парсит прокси. Скрипт должен делать это не по моему запросу, а непрерывно например каждые 1-2 минуты.

    либо же чекать мой список (указанных мною URL, см. спойлер с примером ниже) сайтов, на которых присутствует раздача проксей. Также он должен делать это по таймеру, например каждые 1-2 минуты
    спойлер с примером моего URL c раздачей прокси
    5e9d831988f27114756738.png


    При любом раскладе, после каждого парсинга и чека, он должен результаты записывать в txt файл , именно полностью перезаписывая TXT файл новыми проксями (удалять старые прокси из этого файла)

    Финальный txt файл должен быть доступен мне, желательно через браузер например сделав запрос из браузера, в таком виде: site.ru/results.txt
  • Как добавить к чекингу HTTPS и HTTP еще и проверку и выдачу SOCKS5 проксей?

    mik777em
    @mik777em Автор вопроса
    следуя вашему совету, правильно ли я прописал?
    <code lang="php">
    <?php
    $proxies = file ("1_ne_check.txt");
    if (empty($proxies))
    {
        exit(1);
    }
    $proxies_out = array();
    $mc = curl_multi_init ();
    for ($thread_no = 0; $thread_no<count ($proxies); $thread_no++)
    {
    $c [$thread_no] = curl_init ();
    curl_setopt ($c [$thread_no], CURLOPT_URL, "http://google.com");
    curl_setopt ($c [$thread_no], CURLOPT_HEADER, 0);
    curl_setopt ($c [$thread_no], CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($c [$thread_no], CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt ($c [$thread_no], CURLOPT_TIMEOUT, 10);
    curl_setopt ($c [$thread_no], CURLOPT_PROXY, trim ($proxies [$thread_no]));
    curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
    curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
    curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
    curl_multi_add_handle ($mc, $c [$thread_no]);
    }
     
    do {
    while (($execrun = curl_multi_exec ($mc, $running)) == CURLM_CALL_MULTI_PERFORM);
    if ($execrun != CURLM_OK) break;
    while ($done = curl_multi_info_read ($mc))
    {
    $info = curl_getinfo ($done ['handle']);
    if ($info ['http_code'] == 301) {
    echo trim ($proxies [array_search ($done['handle'], $c)])."\r\n";
    $proxies_out[trim($proxies[array_search($done['handle'], $c)])] = trim($proxies[array_search($done['handle'], $c)]);
    }
    curl_multi_remove_handle ($mc, $done ['handle']);
    }
    } while ($running);
    curl_multi_close ($mc);
    file_put_contents("2_results.txt", implode("\r\n", $proxies_out));
    ?>
    </code>


    что именно я поменял
    5e9d4fee20f02476839898.png