К концу этого руководства по интеграции прокси в Laravel вы поймете:
- Что такое прокси-серверы и как они работают в Laravel
- Когда и зачем они могут вам понадобиться
- Как настроить прокси в проекте Laravel
- Как обрабатывать аутентификацию через прокси-сервер, проблемы с SSL-сертификатом и ротацию IP-адресов в Laravel
- Как интегрировать прокси в компонент
HttpClient
в Symfony
Давайте погрузимся!
Что такое прокси-сервер Laravel?
Прокси-сервер Laravel выступает в качестве посредника между вашим бэкендом Laravel и внешним сервером. Он позволяет программно направлять трафик вашего сервера через прокси-сервер, чтобы скрыть ваш IP-адрес.
Ниже показано, как работает прокси в Laravel:
- Laravel отправляет HTTP-запрос, используя клиентскую библиотеку HTTP с настроенным прокси.
- Запрос проходит через прокси-сервер.
- Прокси пересылает его на сервер назначения.
- Сервер назначения отвечает прокси-серверу.
- Затем прокси возвращает ответ в 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
:
- Отправляет
GET-запрос
наhttps://httpbin.io/ip
, используя настроенный прокси. - Получает IP-адрес выхода из ответа.
- Возвращает этот 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.
Шаг №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:
- Создайте массив, содержащий несколько URL-адресов прокси-серверов
- Случайно выбирайте по одному перед каждым запросом
- Установите выбранный прокси-сервер в конфигурации 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);
}
}
Приведенный выше фрагмент демонстрирует, как случайным образом выбрать прокси из списка, чтобы имитировать ротацию прокси. Хотя этот подход работает, у него есть некоторые недостатки:
- Вы должны поддерживать пул надежных прокси-серверов, что часто обходится недешево.
- Для эффективной ротации пул прокси должен быть достаточно большим. Без большого пула одни и те же прокси будут использоваться многократно, что может привести к обнаружению и блокировке.
Чтобы обойти эти ограничения, воспользуйтесь ротационной прокси-сетью Bright Data. Эта инфраструктура автоматически ротирует IP-адреса от вашего имени и предоставляет вам доступ к:
- 1500 млн+ IP-адресов в 195 странах
- Прокси-серверы для жилых помещений, центров обработки данных, интернет-провайдеров и мобильных устройств
- Высокое время безотказной работы и 99,9-процентный коэффициент успеха
В следующем разделе мы покажем вам, как использовать вращающиеся прокси Bright Data в Laravel.
Использование яркого прокси-сервера данных в Laravel
Bright Data управляет одной из крупнейших прокси-сетей в мире, поддерживающей компании из списка Fortune 500 и более 20 000 клиентов. Их прокси-сеть включает в себя:
- Прокси для дата-центров – более 770 000 IP-адресов дата-центров.
- Прокси-серверы для жилых помещений – более 150 000 000 IP-адресов в более чем 195 странах.
- Прокси-провайдеры – более 700 000 IP-адресов провайдеров.
- Мобильные прокси – более 7 000 000 мобильных IP-адресов.
Выполните следующие шаги, чтобы использовать жилые прокси Bright Data в Laravel.
Если у вас еще нет учетной записи, перейдите к регистрации в 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.
Создайте аккаунт и начните тестировать наши прокси бесплатно уже сегодня!
Кредитная карта не требуется