Servidor proxy em PHP: como configurar proxies em PHP

Aprenda a configurar um servidor proxy em PHP para aprimorar o web scraping, garantindo segurança e superando bloqueios geográficos.
3 min read
PHP Proxy Server How to Set Up Proxies in PHP

Ao se conectar a uma rede, um endereço IP serve como um identificador exclusivo, facilitando a comunicação e a identificação dentro dessa rede e pela internet. Um servidor proxy atua como intermediário entre o dispositivo do usuário e a internet, melhorando a segurança, a privacidade e o desempenho ao gerenciar solicitações e ocultar o endereço IP do usuário.

Os servidores proxy garantem o anonimato e ajudam a filtrar ameaças mascarando seu IP e controlando o acesso ao site. Quando se trata especificamente de web scraping, os servidores proxy desempenham um papel crucial, ajudando os usuários a contornar os banimentos de IP e a evitar medidas de bloqueio geográfico.

Neste tutorial, você aprenderá mais sobre proxies e como configurar um servidor proxy para web scraping em PHP.

Usando um servidor proxy em PHP

Se você quiser configurar um servidor proxy, há várias maneiras de fazer isso. Você pode usar aplicativos de servidor como Apache ou Nginx como servidores proxy de encaminhamento, ou pode optar por ferramentas de proxy dedicado, como Squid. Neste tutorial, você usará o Apache como servidor proxy.

Para configurar um servidor proxy para web scraping em PHP, você precisa ter certeza de que o PHP está instalado em seu sistema. Se você ainda não o instalou, siga a documentação oficial para fazer isso. Este artigo usa Ubuntu como sistema operacional.

Configurar um servidor proxy com o Apache

No Apache, os módulos mod_proxymod_proxy_httpmod_proxy_connect podem ser usados para fazer o Apache atuar como um servidor proxy.

Para configurar o servidor proxy, você precisa começar ativando os módulos:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_connect

Em seguida, você precisa criar um novo arquivo VirtualHost onde definirá o servidor proxy:

cd /etc/apache2/sites-available/
sudo cp 000-default.conf proxy.conf

No arquivo proxy.conf , cole o seguinte código:

<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>

Nesse código, ProxyRequests On permite que o Apache seja um servidor proxy de encaminhamento. ProxyVia On adiciona um cabeçalho Via que ajuda a inspecionar o caminho da solicitação em uma cadeia de proxies. Além disso, o bloco de controle <Proxy> declara quem tem permissão para acessar o proxy. Qualquer host tem permissão para acessar o servidor proxy.

Para obter informações mais detalhadas, confira as documentações oficiais.

Para concluir a configuração do servidor proxy, habilite o VirtualHost:

sudo a2ensite proxy.conf
service apache2 reload

Usando o servidor proxy

Na seção a seguir, você aprenderá a usar o servidor proxy no código PHP. Normalmente, qualquer solicitação web ou estrutura de automação fornece um mecanismo para definir proxies. Neste artigo, você aprenderá sobre três métodos: curl, file_get_contentse Symfony BrowserKit.

Definir proxies em curl

O primeiro método que você aprenderá mostra como integrar proxies em seu script PHP usando a biblioteca cURL , uma ferramenta poderosa para fazer solicitações HTTP.

Crie um arquivo chamado curl.php com o seguinte código:

<?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);

Esse script inicia uma sessão curl, define o URL de destino e o URL do proxy usando curl_setopte executa a sessão para recuperar a resposta. A opção CURLOPT_PROXY define o proxy. O URL do proxy está definido como localhost:80, o que aproveita o proxy que você criou na etapa anterior.

Para simplificar, o script também inclui opções para desativar a verificação SSL. No entanto, tenha cautela em um ambiente de produção. Quaisquer erros de curl encontrados durante a execução são exibidos para fins de depuração.

Execute o script com o comando php curl.php.

Depois de executar o script, você pode inspecionar o arquivo de log de acesso do Apache para rastrear a solicitação feita ao proxy. O arquivo de log de acesso normalmente se encontra em /var/log/httpd/access.log.

Neste arquivo de log, você encontrará uma entrada usando o protocolo CONNECT correspondente ao script executado, indicando que a solicitação foi processada com sucesso, apresentando o código de status HTTP número 200:

127.0.0.1 - - [21/Dec/2023:12:34:56 +0530] "CONNECT httpbin.org:443 HTTP/1.1" 200 -

Definir proxies em file_get_contents

Você também pode usar file_get_contents para configurar proxies em PHP e depois aproveitar o proxy Apache para buscar conteúdo.

Para fazer isso, crie um arquivo file_get_contents.php e adicione o seguinte código:

<?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;
}

Esse código PHP inicia uma solicitação HTTP para recuperar os dados de http://wikipedia.org usando um servidor proxy especificado. Os detalhes do servidor proxy são configurados no array $options , em que a chave “proxy” define o endereço do servidor (“tcp: //127.0.0. 1:80”) e request_fulluri é definido como true (verdadeiro), tratando o URI da solicitação como um URI completo.

Um contexto de stream que adiciona essas opções é criado usando-se stream_context_create. A solicitação HTTP real é feita com file_get_contents, que adiciona o contexto criado e resulta na recuperação do conteúdo de HttpBin.

Definir proxies no Symfony BrowserKit

Se você é usuário do Symfony , é fácil integrar proxies com o BrowserKit.

Se você quiser acompanhar as etapas e ainda não tiver o Symfony instalado, certifique-se de instalá-lo agora.

Depois que o Symfony estiver configurado, você poderá facilmente usar proxies em seu código 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;

Esse bloco de código usa o Symfony BrowserKit e HttpClient para fazer uma solicitação GET para HttpBin por meio do proxy Apache configurado em $proxyUrl. Em seguida, o conteúdo da resposta é recuperado e exibido. A instância HttpBrowser é preparada com as configurações de proxy especificadas, facilitando a integração de proxies em aplicações Symfony.

Limitações dos métodos tradicionais de integração de proxy

Embora a configuração de proxies em PHP possa parecer simples, os vários métodos vêm com certas limitações. Por exemplo, embora seja possível alternar entre diferentes proxies manualmente, essa é uma abordagem ineficiente ao coletar grandes quantidades de dados.

Além disso, se o proxy ficar indisponível ou o IP for restringido ou encontrar problemas, esses métodos não fornecem inerentemente um mecanismo para mudar automaticamente para um proxy alternativo. Isso resulta em interrupções no serviço ou falhas na recuperação de dados que exigem intervenção manual. Embora você possa escrever código para alternar proxies automaticamente, é um processo complicado e você precisará configurar ou alugar vários servidores proxy em diferentes regiões geográficas para obter a máxima segurança.

A boa notícia é que a Bright Data pode ajudar.

O servidor proxy da Bright Data

A Bright Data é uma plataforma de extração de dados da web que oferece ferramentas para web scraping e coleta de dados em grande escala. Por exemplo, a coleção robusta de servidores proxy da Bright Data no mundo todo oferece acesso a diversos endereços IP que podem ajudar você a superar bloqueios geográficos e banimentos de IP.

Além disso, os proxies da Bright Data sob demanda podem ajudar você a adquirir dinamicamente os recursos de que precisa, quando necessário. Isso é útil em cenários de web scraping em que seus requisitos flutuam, garantindo desempenho e capacidade de resposta ideais. A Bright Data oferece diferentes tipos de proxies (ou seja, proxies residenciais, proxies de datacenters, proxies de ISPs e proxies móveis) que garantem que você tenha o proxy mais adequado ao seu caso de uso.

Uma das principais vantagens da solução da Bright Data é a rotação de proxies automatizada, que contribui para melhorar o anonimato e mitigar os riscos de detecção durante atividades de web scraping. Esse recurso, juntamente com o acesso a uma rede avançada de proxies de datacenters com mais de 770.000 IPs em todo o mundo, torna a Bright Data uma escolha superior para web scraping.

Usando o proxy da Bright Data com PHP

Usar a Bright Data é fácil. Tudo o que você precisa fazer é se inscrever para uma conta gratuita.

Depois de criar uma conta, clique em Proxies and Scraping Infra (infraestrutura de proxies e scraping) na barra lateral e selecione Get Started (começar) em Residential Proxies (proxies residenciais):

Configuração de proxy residencial da Bright Data

Aqui, você pode configurar o proxy, por exemplo, escolher entre Dedicated (dedicado) e Shared proxies (proxies compartilhados):

Escolhendo a configuração do proxy

Depois de escolher sua configuração de proxy, ative o serviço de proxy clicando em Save (salvar). A Bright Data fornece credenciais de login exclusivas:

Credenciais de login da Bright Data

Com os dados do seu proxy Bright Data, você pode usá-lo para extrair dados da Wikipedia. Comece criando um arquivo scrape.php e adicionando o seguinte código:

<?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);

Certifique-se de substituir Your-proxy-url-from-the-access-parametersYour-usernameYour-password por suas credenciais específicas.

Nesse código, os dados do proxy são integrados à solicitação curl para garantir que o web scraping seja feito por meio da rede de proxies da Bright Data.

Em seguida, execute php scrape.php em seu terminal. Aqui estão os resultados extraídos:

Resultados de dados extraídos da Wikipedia usando a Bright Data

Para confirmar que suas solicitações estão sendo encaminhadas pelo proxy da Bright Data, você pode tentar enviar uma solicitação GET para http://lumtest.com/myip.json. Se você abrir isso em seu navegador, ele responderá com um objeto JSON contendo os detalhes do seu ISP local.

Para testar com um proxy da Bright Data, salve o código a seguir em um novo arquivo PHP e execute-o:

<?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);

A saída deve mostrar a localização e outros detalhes do proxy que está sendo usado:

{"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"}}

Isso confirma que a solicitação está realmente sendo roteada pelos servidores proxy da Bright Data.

Conclusão

Nesse tutorial, você explorou vários métodos para configurar um servidor proxy em PHP. Embora os servidores proxy locais com Apache sejam uma opção, aproveitar os servidores proxy da Bright Data traz um novo nível de eficiência e versatilidade.

Os servidores proxy da Bright Data oferecem uma rede proxy global abrangente, garantindo acesso a uma ampla variedade de IPs, incluindo proxies residenciais, de ISPs, de datacenters e móveis. Além disso, a rotação de proxies da Bright Data contribui para melhorar o anonimato e a mitigação dos riscos de detecção durante atividades de web scraping.

Se você é um novato em busca de simplicidade ou um desenvolvedor experiente que precisa de recursos avançados, os servidores proxy da Bright Data fornecem uma base robusta para empreendimentos de web scraping bem-sucedidos e eficientes.