Как использовать прокси в Laravel: 2025 уроков

Освойте использование прокси в Laravel, начиная с простой настройки и заканчивая аутентификацией и ротацией IP-адресов, обеспечивая свободный от блокировок веб-скраппинг и геодоступ.
1 мин. чтения
Laravel Proxies blog image

К концу этого руководства по интеграции прокси в Laravel вы поймете:

  • Что такое прокси-серверы и как они работают в Laravel
  • Когда и зачем они могут вам понадобиться
  • Как настроить прокси в проекте Laravel
  • Как обрабатывать аутентификацию через прокси-сервер, проблемы с SSL-сертификатом и ротацию IP-адресов в Laravel
  • Как интегрировать прокси в компонент HttpClient в Symfony

Давайте погрузимся!

Что такое прокси-сервер Laravel?

Прокси-сервер Laravel выступает в качестве посредника между вашим бэкендом Laravel и внешним сервером. Он позволяет программно направлять трафик вашего сервера через прокси-сервер, чтобы скрыть ваш IP-адрес.

Ниже показано, как работает прокси в Laravel:

  1. Laravel отправляет HTTP-запрос, используя клиентскую библиотеку HTTP с настроенным прокси.
  2. Запрос проходит через прокси-сервер.
  3. Прокси пересылает его на сервер назначения.
  4. Сервер назначения отвечает прокси-серверу.
  5. Затем прокси возвращает ответ в Laravel.

В результате целевой сервер видит запрос, пришедший с IP-адреса прокси-сервера, а не с вашего сервера Laravel. Этот механизм помогает обойти гео-ограничения, повысить анонимность и управлять лимитами скорости.

Примеры использования прокси в Laravel

Прокси в Laravel полезны во многих сценариях, но эти три – самые распространенные:

  • Веб-скреппинг: Используйте прокси-серверы, чтобы избежать запретов IP-адресов, ограничений скорости или других блокировок при создании API для веб-скрепинга. Подробнее об этом читайте в нашем руководстве по веб-скреппингу с помощью Laravel.
  • Обход ограничений на скорость использования сторонних API: Чередуйте IP-адреса прокси-серверов, чтобы не превышать квоты на использование API и избежать дросселирования.
  • Доступ к контенту с географическими ограничениями: Выберите прокси-серверы в определенных регионах, чтобы получить доступ к услугам, доступным только в определенных странах.

Дополнительные примеры см. в нашем руководстве по использованию веб-данных и прокси-серверов.

Использование прокси в Laravel: Пошаговое руководство

В этом разделе мы покажем, как интегрировать прокси в Laravel с помощью HTTP-клиента по умолчанию. Если вы используете Symfony HttpClient, не волнуйтесь – мы рассмотрим интеграцию прокси с этой библиотекой позже в этой статье.

Примечание: HTTP-клиент Laravel построен на основе Guzzle, поэтому вам стоит ознакомиться с нашим руководством по интеграции с прокси Guzzle.

Чтобы продемонстрировать интеграцию, мы создадим конечную точку GET /api/v1/get-ip:

  1. Отправляет GET-запрос на https://httpbin.io/ip, используя настроенный прокси.
  2. Получает IP-адрес выхода из ответа.
  3. Возвращает этот IP клиенту, вызывающему конечную точку Laravel.

Если все настроено правильно, то IP, возвращаемый этим API, будет совпадать с IP прокси.

Давайте начнем!

Шаг №1: Настройка проекта

Если у вас уже настроено приложение Laravel, вы можете пропустить этот шаг и перейти к шагу № 2.

В противном случае следуйте приведенным ниже инструкциям, чтобы создать новый проект Laravel. Откройте терминал и выполните следующую команду Composer create-command, чтобы инициализировать новый проект Laravel:

composer create-project laravel/laravel laravel-proxies-application

Эта команда создаст новый проект Laravel в папке с именем laravel-proxies-application. Откройте эту папку в выбранной вами IDE PHP.

На этом этапе вышеуказанная папка должна содержать стандартную структуру файлов Laravel:

Структура проекта Laravel

Замечательно! Теперь у вас есть проект Laravel.

Шаг №2: Определите конечную точку тестового API

В каталоге проекта выполните следующую команду Artisan, чтобы создать новый контроллер:

php artisan make:controller IPController

Это создаст файл с именем IPController.php в каталоге /app/Http/Controllers с содержимым по умолчанию:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class IPController extends Controller
{
    //
}

Теперь добавьте приведенный ниже метод getIP() в файл IPController.php:

public function getIP(): JsonResponse
{
    // make a GET request to the "/ip" endpoint to get the IP of the server
    $response = Http::get('https://httpbin.io/ip'); 

    // retrieve the response data
    $responseData = $response->json();

    // return the response data 
    return response()->json($responseData);
}

Этот метод использует Http-клиент Laravel для получения вашего IP-адреса с сайта https://httpbin.io/ip и возвращает его в формате JSON.

Не забудьте импортировать эти два импорта:

use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Http;

Поскольку вы хотите, чтобы ваше приложение Laravel предлагало API без статических данных, включите маршрутизацию API с помощью команды install:api Artisan:

php artisan install:api

Чтобы открыть этот метод через конечную точку API, добавьте следующий маршрут в файл routes/api.php:

use App\Http\Controllers\IPController;

Route::get('/v1/get-ip', [IPController::class, 'getIP']);

Ваша новая конечная точка API будет доступна по адресу:

/api/v1/get-ip

Примечание: Помните, что каждый API Laravel по умолчанию доступен по пути /api.

Пора протестировать конечную точку /api/v1/get-ip!

Запустите сервер разработки Laravel, выполнив команду :

php artisan serve

Теперь ваш сервер должен прослушивать локальный порт 8000.

Выполните GET-запрос к конечной точке /api/v1/get-ip с помощью cURL:

curl -X GET 'http://localhost:8000/api/v1/get-ip' 

Примечание: В Windows замените curl на curl.exe. Узнайте больше в нашем руководстве о том , как отправлять GET-запросы с помощью cURL.

Вы должны получить ответ, подобный этому:

{
  "origin": "45.89.222.18"
}

Приведенный выше ответ точно такой же, как и от конечной точки /ip в HttpBin, что подтверждает, что ваш Laravel API работает идеально. В частности, показанный IP-адрес – это публичный IP-адрес вашей машины. Далее давайте интегрируем прокси для маскировки этого IP!

Шаг № 3: Получение прокси-сервера

Чтобы использовать прокси в вашем приложении Laravel, вам сначала нужно получить доступ к работающему прокси-серверу.

Хотя многие сайты предлагают бесплатные URL-адреса прокси-серверов, следует быть осторожным – поддержание инфраструктуры прокси-серверов требует больших затрат. Если сервис предоставляет прокси бесплатно, спросите себя, как он это делает. Зачастую ответ заключается в теневых методах, таких как сбор данных или перенаправление трафика.

Примечание: Бесплатные прокси-серверы следует использовать исключительно в тестовых или образовательных целях – никогда в производственных средах.

Если вам нужны надежные прокси, обращайтесь к авторитетным провайдерам, которые предлагают бесплатные пробные версии или ограниченные бесплатные планы. Например, вы можете попробовать наши бесплатные прокси.

Типичный URL-адрес прокси-сервера выглядит следующим образом:

<protocol>://<host>:<port>

Где:

  • protocol – протокол, необходимый для подключения к прокси-серверу (например, http, https, socks5)
  • host – это IP-адрес или домен прокси-сервера.
  • порт – порт, используемый для маршрутизации трафика

В этом примере предположим, что URL-адрес вашего прокси-сервера будет таким:

http://66.29.154.103:3128

Сохраните его в переменной внутри метода getIP():

$proxyUrl = 'http://66.29.154.103:3128';

Пора посмотреть, как использовать прокси с Http в Laravel!

Шаг #4: Интеграция прокси в Http

Интеграция прокси в Laravel с помощью Http-клиента требует лишь небольшой дополнительной настройки:

$proxyUrl = 'http://66.29.154.103:3128';

$response = Http::withOptions([
    'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');

$responseData = $response->json();

Как видите, все, что вам нужно сделать, это передать URL прокси-сервера в качестве опции с помощью метода withOptions(). Это указывает HTTP-клиенту Laravel направить запрос через указанный прокси-сервер, используя опцию прокси Guzzle.

Потрясающе! Интеграция прокси в Laravel завершена.

Шаг №5: Соберите все вместе

Теперь ваша окончательная логика Laravel API с интеграцией прокси должна выглядеть следующим образом:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Http;

class IPController extends Controller
{

    public function getIP(): JsonResponse
    {
        // the URL of the proxy server
        $proxyUrl = 'http://66.29.154.103:3128'; // replace with your proxy URL

        // make a GET request to /ip endpoint through the proxy server
        $response = Http::withOptions([
            'proxy' => $proxyUrl
        ])->get('https://httpbin.io/ip');

        // retrieve the response data
        $responseData = $response->json();

        // return the response data
        return response()->json($responseData);
    }
}

Протестируйте его, запустив Laravel локально:

php artisan serve

И снова подключитесь к конечной точке /api/v1/get-ip:

curl -X GET 'http://localhost:8000/api/v1/get-ip' 

На этот раз результат должен быть примерно таким:

{
  "origin": "66.29.154.103"
}

Поле "origin" показывает IP-адрес прокси-сервера, подтверждая, что ваш реальный IP теперь скрыт за прокси.

Внимание: Бесплатные прокси-серверы часто нестабильны или недолговечны. К тому времени, когда вы попробуете это сделать, пример прокси может уже не работать. При необходимости замените $proxyUrl на активный в данный момент перед тестированием.

Примечание: Если при выполнении запроса возникают ошибки SSL, обратитесь к советам по устранению неполадок, приведенным ниже в разделе о расширенных вариантах использования.

Примеры использования достижений

Вы только что изучили основы интеграции прокси с Laravel, но есть и другие, более сложные сценарии, которые необходимо рассмотреть.

Аутентификация через прокси-сервер

Премиум-прокси часто требуют аутентификации, чтобы доступ к ним могли получить только авторизованные пользователи. В этом случае, если вы не укажете правильные учетные данные, вы получите эту ошибку:

cURL error 56: CONNECT tunnel failed, response 407

URL-адрес аутентифицированного прокси обычно имеет следующий формат:

<protocol>://<username>:<password>@<host>:<port>

Где имя пользователя и пароль – это ваши учетные данные для аутентификации.

Класс Http в Laravel (который под капотом основан на Guzzle) полностью поддерживает аутентифицированные прокси. Поэтому вам не нужно ничего менять. Просто включите учетные данные аутентификации непосредственно в URL прокси:

$proxyUrl = '<protocol>://<username>:<password>@<host>:<port>';

Например:

// authenticated proxy with username and password
$proxyUrl = 'http://<username>:<password>@<host>:<port>';

$response = Http::withOptions([
    'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');

Замените значение $proxyUrl на действительный аутентифицированный URL прокси.

Теперь Http будет направлять трафик на настроенный аутентифицированный прокси-сервер!

Избегайте проблем с SSL-сертификатом

При настройке прокси с помощью Http-клиента Laravel ваши запросы могут не выполняться из-за ошибок проверки SSL-сертификата, например:

cURL error 60: SSL certificate problem: self-signed certificate in certificate chain

Обычно это происходит, когда прокси-сервер использует самоподписанный SSL-сертификат.

Если вы доверяете прокси-серверу и проводите тестирование только локально или в безопасной среде, вы можете отключить проверку SSL следующим образом:

$response = Http::withOptions([
    'proxy' => $proxyUrl,
    'verify' => false, // disable SSL certificate verification
])->get('https://httpbin.io/ip');

Предупреждение: Отключение проверки SSL подвергает вас атакам типа “человек посередине”. Поэтому используйте эту опцию только в доверенных средах.

В противном случае, если у вас есть файл сертификата прокси-сервера (например, proxy-ca.crt), вы можете использовать его для проверки SSL следующим образом:

$response = Http::withOptions([
    'proxy' => $proxyUrl,
    'verify' => storage_path('certs/proxy-ca.crt'), // Path to the CA bundle
])->get('https://httpbin.io/ip');

Убедитесь, что файл proxy-ca.crt хранится в безопасном и доступном каталоге (например, storage/certs/), и у Laravel есть разрешение на его чтение.

При использовании любого из этих методов ошибка проверки SSL, вызванная прокси, должна исчезнуть.

Ротация доверенных лиц

Если вы будете постоянно использовать один и тот же прокси-сервер, целевой сайт, скорее всего, обнаружит и заблокирует его IP-адрес. Чтобы избежать этого, вы можете чередовать прокси-серверы – использоватьразные для каждого запроса.

Вот шаги по ротации прокси в Laravel:

  1. Создайте массив, содержащий несколько URL-адресов прокси-серверов
  2. Случайно выбирайте по одному перед каждым запросом
  3. Установите выбранный прокси-сервер в конфигурации HTTP-клиента

Реализуйте это с помощью данного кода:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Http;

function getRandomProxyUrl(): string
{
    // a list of valid proxy URLs (replace with your proxy URLs)
    $proxies = [
        '<protocol_1>://<proxy_host_1>:<port_1>', 
        // ...
        '<protocol_n>://<proxy_host_n>:<port_n>',
    ];

    // return a proxy URL randomly picked from the list
    return $proxies[array_rand($proxies)];
}

class IPController extends Controller
{
    public function getIP(): JsonResponse
    {
        // the URL of the proxy server
        $proxyUrl = getRandomProxyUrl();
        // make a GET request to /ip endpoint through the proxy server
        $response = Http::withOptions([
            'proxy' => $proxyUrl
        ])->get('https://httpbin.io/ip');

        // retrieve the response data
        $responseData = $response->json();

        // return the response data
        return response()->json($responseData);
    }
}

Приведенный выше фрагмент демонстрирует, как случайным образом выбрать прокси из списка, чтобы имитировать ротацию прокси. Хотя этот подход работает, у него есть некоторые недостатки:

  1. Вы должны поддерживать пул надежных прокси-серверов, что часто обходится недешево.
  2. Для эффективной ротации пул прокси должен быть достаточно большим. Без большого пула одни и те же прокси будут использоваться многократно, что может привести к обнаружению и блокировке.

Чтобы обойти эти ограничения, воспользуйтесь ротационной прокси-сетью Bright Data. Эта инфраструктура автоматически ротирует IP-адреса от вашего имени и предоставляет вам доступ к:

  • 1500 млн+ IP-адресов в 195 странах
  • Прокси-серверы для жилых помещений, центров обработки данных, интернет-провайдеров и мобильных устройств
  • Высокое время безотказной работы и 99,9-процентный коэффициент успеха

В следующем разделе мы покажем вам, как использовать вращающиеся прокси Bright Data в Laravel.

Использование яркого прокси-сервера данных в Laravel

Bright Data управляет одной из крупнейших прокси-сетей в мире, поддерживающей компании из списка Fortune 500 и более 20 000 клиентов. Их прокси-сеть включает в себя:

Выполните следующие шаги, чтобы использовать жилые прокси Bright Data в Laravel.

Если у вас еще нет учетной записи, перейдите к регистрации в Bright Data. Если у вас уже есть учетная запись, войдите в нее, чтобы получить доступ к панели управления:

Приборная панель Bright Data

Войдя в систему, нажмите кнопку “Получить прокси-продукты”, чтобы продолжить:

Нажатие кнопки "Получить прокси-продукты"

Вы будете перенаправлены на страницу “Прокси и инфраструктура скрапинга”:

Страница "Прокси-серверы и инфраструктура скрапинга".

В таблице найдите строку “Жилье” и щелкните по ней:

Щелкните по строке "Жилые помещения".

Вы будете направлены на страницу прокси-сервера жилого помещения:

Страница "Жилье"

Если это ваш первый раз, следуйте указаниям мастера, чтобы настроить прокси-сервис в соответствии с вашими потребностями. Для получения дополнительной помощи обращайтесь в круглосуточную службу поддержки.

На вкладке “Обзор” найдите хост, порт, имя пользователя и пароль вашего прокси-сервера:

Учетные данные прокси-сервера

Используйте эти данные для создания URL-адреса прокси-сервера:

$proxyUrl = 'http://<brightdata_proxy_username>:<brightdata_proxy_password>@<brightdata_proxy_host>:<brightdata_proxy_port>';

Замените места (, , , ) вашими настоящими учетными данными прокси.

Обязательно переключите параметр “Выкл.”, чтобы включить прокси-сервер, и следуйте остальным инструкциям для завершения настройки:

Нажатие на переключатель активации

Теперь, когда URL-адрес прокси настроен, вы можете интегрировать его в Laravel с помощью Http-клиента. Вот логика отправки запроса через вращающийся прокси Bright Data residential в Laravel:

public function getIp()
{
    // TODO: replace the placeholders with your Bright Data's proxy info
    $proxyUrl = 'http://<brightdata_proxy_username>:<brightdata_proxy_password>@<brightdata_proxy_host>:<brightdata_proxy_port>';

    // make a GET request to "/ip" through the proxy
    $response = Http::withOptions([
        'proxy' => $proxyUrl,
    ])->get('https://httpbin.org/ip');

    // get the response data
    $responseData = $response->json();

    return response()->json($responseData);
}

Каждый раз, когда вы будете запускать вышеприведенный скрипт, вы будете видеть разный IP-адрес выхода.

Ротация прокси в Laravel никогда не была такой простой с авторотацией прокси от Bright Data!

[Дополнительно] Интеграция прокси HttpClient в Symfony

Предположим, вы предпочитаете компонент HttpClient от Symfony, а не HTTP-клиент Http, используемый в Laravel по умолчанию.

Следуйте приведенным ниже инструкциям, чтобы реализовать интеграцию прокси в HttpClient с помощью Laravel.

Сначала вам нужно установить пакет Symfony HTTP client через Composer:

composer require symfony/http-client

Далее вы можете использовать Symfony’s HttpClient с прокси следующим образом:

<?php

namespace App\Http\Controllers;

use Symfony\Contracts\HttpClient\HttpClientInterface;
use Illuminate\Http\JsonResponse;

class IpController extends Controller
{
    // where to store the HttpClient instance
    private $client;

    public function __construct(HttpClientInterface $client)
    {
        // initialize the HttpClient private instance
        $this->client = $client;
    }

    public function getIp(): JsonResponse
    {
          // your proxy URL
          $proxyUrl = 'http://66.29.154.103:3128'; // replace with your proxy URL

          // make a GET request to the "/ip" endpoint through the proxy
          $response = $this->client->request('GET', 'https://httpbin.io/ip', [
              'proxy' => $proxyUrl,
          ]);

          // parse the response JSON and return it
          $responseData = $response->toArray();
          return response()->json($responseData);
    }
}

Эта настройка позволяет использовать Symfony’s HttpClient для отправки запросов через прокси.

Заключение

В этом уроке по интеграции прокси вы узнали, почему прокси имеют значение и как использовать их в Laravel. Мы рассказали о том, как легко настроить прокси в Laravel, используя как HTTP-клиент Laravel по умолчанию, так и HttpClient Symfony.

Вы также увидели, почему бесплатные прокси-сервисы могут быть ненадежными и даже рискованными. Для стабильной работы, безопасности и масштабируемости необходимо выбрать надежного прокси-провайдера. Сэкономьте время и силы и перейдите к лучшему прокси-провайдеру на рынке– Bright Data.

Создайте аккаунт и начните тестировать наши прокси бесплатно уже сегодня!

Кредитная карта не требуется