При подключении к сети IP-адрес служит уникальным идентификатором, облегчающим связь и идентификацию в этой сети и по всему Интернету. Прокси-сервер выступает в роли посредника между устройством пользователя и Интернетом, повышая безопасность, конфиденциальность и производительность, управляя запросами и скрывая IP-адрес пользователя.
Прокси-серверы обеспечивают анонимность и помогают отфильтровывать угрозы, скрывая ваш IP-адрес и контролируя доступ к веб-сайтам. В сфере веб-парсинга прокси-серверы играют решающую роль, помогая пользователям обходить баны IP-адресов и геоблокировки.
Из этого урока вы узнаете больше о прокси-серверах и о том, как настроить прокси-сервер для веб-парсинга в PHP.
Использование прокси-сервера в PHP
Если вы хотите настроить прокси-сервер, есть разные способы сделать это. В качестве прямых прокси-серверов можно использовать серверные приложения, такие как Apache или Nginx , или выбрать специальные прокси-инструменты, такие как Squid. В этом руководстве вы будете использовать Apache в качестве прокси-сервера.
Чтобы настроить прокси-сервер для веб-парсинга в PHP, вам необходимо убедиться, что в вашей системе установлен PHP. Если вы еще не установили его, следуйте инструкциям по установке в официальной документации. В этой статье в качестве операционной системы используется Ubuntu .
Настройка прокси-сервера с Apache
Модули mod_proxy
, mod_proxy_http
и mod_proxy_connect
в Apache можно использовать для придания Apache функции прокси-сервера.
Чтобы настроить прокси-сервер, необходимо сначала включить модули:
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_connect
Затем нужно создать новый файл VirtualHost
, в котором вы определите прокси-сервер:
cd /etc/apache2/sites-available/
sudo cp 000-default.conf proxy.conf
Вставьте следующий код в файл proxy.conf
:
<VirtualHost *:80>
ServerName localhost
ServerAdmin admin@localhost
<IfModule mod_ssl.c>
SSLEngine off
</IfModule>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
</VirtualHost>
В этом коде функция ProxyRequests On
позволяет Apache быть прямым прокси-сервером. ProxyVia On
добавляет заголовок Via
, который помогает проверить путь запроса в цепочке прокси-серверов. Кроме того, блок управления <Proxy>
определяет, у кого есть доступ к прокси-серверу. Доступ к прокси-серверу разрешен любому хосту.
Для получения более подробной информации ознакомьтесь с официальной документацией.
Чтобы завершить настройку прокси-сервера, включите VirtualHost
:
sudo a2ensite proxy.conf
service apache2 reload
Использование прокси-сервера
Из следующего раздела вы узнаете, как использовать прокси-сервер в PHP-коде. Как правило, любой веб-запрос или платформа автоматизации предоставляют механизм настройки прокси-серверов. Из этой статьи вы узнаете о трех методах: curl, file_get_contents
и Symfony BrowserKit.
Настройка прокси-серверов в curl
Первый изучаемый метод позволит вам интегрировать прокси в PHP-скрипт с помощью библиотеки cURL
, мощного инструмента для выполнения HTTP-запросов.
Создайте файл с именем curl.php
со следующим кодом:
<?php
$proxyUrl = 'http://localhost:80';
$targetUrl = 'https://httpbin.org/get';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $targetUrl);
curl_setopt($ch, CURLOPT_PROXY, $proxyUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'cURL Error: ' . curl_error($ch);
} else {
echo $response;
}
curl_close($ch);
Этот скрипт инициирует сеанс curl, задает целевой URL-адрес и URL-адрес прокси-сервера с помощью curl_setopt
и выполняет сеанс для получения ответа. Опция CURLOPT_PROXY
задает прокси-сервер. Для URL-адреса прокси-сервера установлено значение localhost:80
, что позволяет использовать прокси-сервер, созданный на предыдущем этапе.
Для простоты скрипт также включает опции отключения проверки SSL. Однако в производственной среде соблюдайте осторожность. Любые ошибки curl, обнаруженные во время выполнения, отображаются в целях отладки.
Запустите скрипт командой php curl.php
.
После выполнения сценария вы можете проверить файл журнала доступа Apache, чтобы отследить запрос, отправленный на прокси-сервер. Файл журнала доступа обычно находится по адресу /var/log/httpd/access.log
.
В этом файле вы найдете запись с протоколом CONNECT
, соответствующую выполненному сценарию и показывающую, что запрос был успешно обработан с кодом состояния HTTP 200:
127.0.0.1 - - [21/Dec/2023:12:34:56 +0530] "CONNECT httpbin.org:443 HTTP/1.1" 200 -
Задайте прокси-серверы в file_get_contents
Вы также можете использовать file_get_contents
для настройки прокси-серверов в PHP, а затем воспользоваться прокси-сервером Apache для получения контента.
Для этого создайте файл file_get_contents.php
и добавьте следующий код:
<?php
$options = [
'http' => [
'proxy' => 'tcp://127.0.0.1:80',
'request_fulluri' => true,
],
];
$context = stream_context_create($options);
$response = file_get_contents('https://httpbin.org/get', false, $context);
if ($response === false) {
echo "Failed to retrieve data from $url";
} else {
echo $response;
}
Этот PHP-код инициирует HTTP-запрос для получения данных с адреса http://wikipedia.org
с использованием указанного прокси-сервера. Сведения о прокси-сервере настраиваются в массиве $options
, где ключ proxy определяет адрес сервера (tcp: //127.0.0.1:80), а request_fulluri
имеет значение true, рассматривая URI запроса как полный URI.
Контекст потока, добавляющий эти опции, создается с помощью stream_context_create
. Фактический HTTP-запрос выполняется с помощью file_get_contents
, добавляя созданный контекст и извлекая контент из HttpBin
.
Настройка прокси-серверов в Symfony BrowserKit
Если вы являетесь пользователем Symfony , вы можете очень просто интегрировать прокси-серверы с помощью BrowserKit.
Если вы хотите продолжить работу, но у вас еще не установлено Symfony, установите его сейчас.
После настройки Symfony вы можете легко использовать прокси-серверы в своем PHP-коде:
<?php
require './vendor/autoload.php';
use Symfony\Component\BrowserKit\HttpBrowser;
use Symfony\Component\HttpClient\HttpClient;
$proxyServer = 'http://127.0.0.1';
$proxyPort = '80';
$client = new HttpBrowser(HttpClient::create(['proxy' => sprintf('%s:%s', $proxyServer, $proxyPort)]));
$client->request('GET', 'https://httpbin.org/get');
$content = $client->getResponse()->getContent();
echo $content;
Этот блок кода использует Symfony BrowserKit и HttpClient
для отправки запроса GET
на адрес HttpBin
через прокси-сервер Apache, настроенный по адресу $proxyUrl
. Затем содержимое ответа извлекается и отображается. Экземпляр HttpBrowser
задан с указанными настройками прокси-сервера, что упрощает интеграцию прокси-серверов в приложения Symfony.
Ограничения традиционных методов интеграции прокси-сервера
Хотя настройка прокси-серверов в PHP может показаться простой, различные методы имеют определенные ограничения. Например, хотя переключаться между разными прокси-серверами можно вручную, такой подход неэффективен при парсинге больших объемов данных.
Кроме того, если прокси-сервер становится недоступен, IP-адрес получает бан или возникают проблемы, эти методы по своей сути не обеспечивают механизма автоматического переключения на альтернативный прокси-сервер. Это приводит к перебоям в обслуживании или сбоям при извлечении данных, требующим ручного вмешательства. Хотя вы можете написать код для автоматического переключения прокси-серверов, это сложный процесс, и для обеспечения максимальной безопасности вам придется настроить или арендовать несколько прокси-серверов в разных географических регионах.
Хорошая новость: вам может помочь Bright Data.
Прокси-сервер Bright Data
Bright Data — это платформа для извлечения веб-данных, которая предлагает инструменты для веб-парсинга и масштабного сбора данных. Например, обширная коллекция прокси-серверов Bright Data по всему миру предоставляет вам доступ к различным IP-адресам, которые помогут вам обойти геоблокировку и баны IP-адресов.
Кроме того, прокси-серверы по запросу от Bright Data помогут вам динамически получать необходимые ресурсы в нужное время. Это полезно в сценариях веб-парсинга, где ваши требования меняются, и обеспечивает оптимальную производительность и скорость реагирования. Bright Data предлагает различные типы прокси-серверов (а именно резидентные прокси-серверы, прокси-серверы центров обработки данных, прокси-серверы интернет-провайдеров и мобильные прокси-серверы). Это гарантирует, что вы найдете прокси-сервер, наиболее подходящий для вашей ситуации.
Одним из основных преимуществ решения Bright Data является автоматическая ротация прокси-серверов, которая способствует повышению анонимности и снижает риски обнаружения при веб-парсинге. Эта функция в сочетании с доступом к передовой прокси-сети центров обработки данных, насчитывающей более 770 000 IP-адресов по всему миру, делает Bright Data превосходным выбором для веб-парсинга.
Использование прокси-сервера Bright Data с PHP
Использовать Bright Data очень просто. Все, что вам нужно сделать, — это зарегистрировать бесплатный аккаунт.
После создания аккаунта нажмите на «Прокси-серверы и инфраструктура парсинга» на боковой панели, а затем выберите «начало работы» в разделе «Резидентные прокси-серверы»:
Здесь вы можете настроить прокси-сервер, например, выбрать между выделенными и общими прокси-серверами :
Выбрав конфигурацию прокси-сервера, активируйте прокси-сервис, нажав «Сохранить». Bright Data предоставляет вам уникальные учетные данные:
Данные прокси-сервера Bright Data позволяют вам использовать его для парсинга «Википедии». Начните с создания файла scrape.php
и добавьте следующий код:
<?php
// BrightData proxy details
$proxyUrl = 'Your-proxy-url-from-the access-paramaters';
$proxyUser = 'Your-username:Your-password';
$targetUrl = 'https://en.wikipedia.org/wiki/Proxy_server';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $targetUrl);
curl_setopt($ch, CURLOPT_PROXY, $proxyUrl);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyUser);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'cURL Error: ' . curl_error($ch);
} else {
$dom = new DOMDocument();
@$dom->loadHTML($response);
$content = $dom->getElementById('mw-content-text')->textContent;
$headings = [];
$headingsNodeList = $dom->getElementsByTagName('h2');
foreach ($headingsNodeList as $heading) {
$headings[] = $heading->textContent;
}
$headingsNodeList = $dom->getElementsByTagName('h3');
foreach ($headingsNodeList as $heading) {
$headings[] = $heading->textContent;
}
echo "Content:\n";
echo $content . "\n\n";
echo "Headings:\n";
foreach ($headings as $index => $heading) {
echo ($index + 1) . ". $heading\n";
}
}
curl_close($ch);
Обязательно замените
URL-адрес-прокси-сервера-из-параметров-доступа
,Ваше-имя-пользователя
иВаш-пароль
своими конкретными учетными данными.
В этом коде данные прокси-сервера интегрированы в запрос curl, чтобы веб-парсинг выполнялся через прокси-сеть Bright Data.
Затем запустите php scrape.php
в своем терминале. Вот результаты анализа парсинга:
Чтобы убедиться, что теперь ваши запросы маршрутизируются через прокси-сервер Bright Data, попробуйте отправить запрос GET по адресу http://lumtest.com/myip.json. Если вы откроете его в своем браузере, в ответ появится объект JSON, содержащий сведения о вашем локальном интернет-провайдере.
Чтобы попробовать его на прокси-сервере Bright Data, сохраните следующий код в новом PHP-файле и запустите его:
<?php
// BrightData proxy details
$proxyUrl = 'brd.superproxy.io:22225';
$proxyUser = 'brd-customer-hl_0c2320f1-zone-residential_proxy1:j30hm0h2pqde';
$targetUrl = 'http://lumtest.com/myip.json';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $targetUrl);
curl_setopt($ch, CURLOPT_PROXY, $proxyUrl);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyUser);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'cURL Error: ' . curl_error($ch);
} else {
echo $response;
}
curl_close($ch);
В выходных данных должно быть указано местоположение и другие сведения об используемом прокси-сервере:
{"ip":"91.66.16.153","country":"DE","asn":{"asnum":3209,"org_name":"Vodafone GmbH"},"geo":{"city":"Berlin","region":"BE","region_name":"Land Berlin","postal_code":"12205","latitude":52.428,"longitude":13.3095,"tz":"Europe/Berlin","lum_city":"berlin","lum_region":"be"}}
Это подтверждает, что запрос действительно маршрутизируется через прокси-серверы Bright Data.
Заключение
Это руководство помогло вам изучить различные методы настройки прокси-сервера в PHP. Хотя можно использовать локальные прокси-серверы с Apache, применение прокси-серверов Bright Data обеспечивает новый уровень эффективности и универсальности.
Прокси-серверы Bright Data предоставляют вам комплексную глобальную прокси-сеть, обеспечивающую доступ к разнообразным IP-адресам, включая резидентные прокси-серверы, прокси-серверы интернет-провайдеров, прокси-серверы центров обработки данных и мобильные прокси-серверы. Кроме того, ротация прокси-серверов Bright Data способствует повышению анонимности и снижению рисков обнаружения при веб-парсинге.
Независимо от того, являетесь ли вы новичком, которому нужна простая процедура, или опытным разработчиком, нуждающимся в расширенных возможностях, прокси-серверы Bright Data обеспечат надежную основу для успешного и эффективного веб-парсинга.
Кредитная карта не требуется