Ротация прокси только с живыми прокси

Как я могу заставить свой PHP-код перебирать массив и удалять прокси, которые не работают?

<?php

$proxies = array(
"187.120.243.27:42026",
"138.185.56.166:32070",
"200.195.186.205:30698",
"170.239.46.2:41823",
"189.85.84.186:80",
);

//foreach value of array do the instructions below

$ch = curl_init();
curl_setopt($ch, CURLOPT_PROXY, $proxies);
//this value should be one value at time of the array 'proxies'
curl_setopt($ch,CURLOPT_URL,'http://icanhazip.com/');
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_HTTPHEADER,array(
    "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0",
    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language: en-US,en;q=0.5",
    "DNT: 1",
    "Upgrade-Insecure-Requests: 1",
    "Connection: close"
));

$data = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    if ($httpcode > 1) {
        echo "$data";
//live proxy stays on the list

    }

    else {
        //unset current array(remove not working proxy)
    }
?>

Я уже написал базовый код, но я новичок в PHP, может ли кто-нибудь мне помочь? Идея состоит в том, чтобы проверить все прокси в списке и удалить прокси, которые не работают.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
253
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мы можем получить доступ к паре ключ-значение в цикле foreach. Мы используем синтаксис $key => $value для доступа к ним обоим по отдельности. Теперь, когда прокси выходит из строя, нам просто нужно использовать функцию unset(), используя $key для удаления этого значения прокси из массива $proxies:

// Initialize live_proxies array
$live_proxies = $proxies;

// In the foreach loop, we access key and its value
// value is $proxy
foreach ($live_proxies as $key => $proxy) {

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_PROXY, $proxy);
    //this value should be one value at time of the array 'proxies'

    curl_setopt($ch,CURLOPT_URL,'http://icanhazip.com/');
    curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_HTTPHEADER,array(
        "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0",
        "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language: en-US,en;q=0.5",
        "DNT: 1",
        "Upgrade-Insecure-Requests: 1",
        "Connection: close"
    ));

    $data = curl_exec($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    if ($httpcode > 1) {
        echo "$data";
    }
    else {
        // use unset function to remove current proxy value
        // from the live_proxies array using the $key
        unset($live_proxies[$key]);
    }
}

Спасибо за сверхбыстрый ответ, я понял код, но как я могу создать новый массив только с живыми прокси?

eduard trionleon 06.11.2018 21:26

@eduardtrionleon проверьте обновленный ответ. я делаю копию массива прокси и называю его live_proxies; теперь внутри цикла я изменяю копию (вместо оригинала)

Madhur Bhaiya 06.11.2018 21:31

Ты классный чувак, код работает на 100%, большое спасибо xD

eduard trionleon 07.11.2018 01:00

Другие вопросы по теме