Ao final deste guia de integração de proxy do Laravel, você entenderá:
- O que são proxies e como eles funcionam no Laravel
- Quando e por que você pode precisar deles
- Como configurar um proxy em seu projeto Laravel
- Como lidar com autenticação de proxy, problemas de certificado SSL e rotação de IP no Laravel
- Como integrar um proxy no componente
HttpClient
do Symfony
Vamos mergulhar de cabeça!
O que é um proxy do Laravel?
Um proxy do Laravel atua como um intermediário entre o backend do Laravel e um servidor externo. Ele permite que você roteie programaticamente o tráfego do seu servidor por meio de um servidor proxy para ocultar seu endereço IP.
Veja a seguir como funciona um proxy no Laravel:
- O Laravel envia uma solicitação HTTP usando uma biblioteca de cliente HTTP com um proxy configurado.
- A solicitação passa pelo servidor proxy.
- O proxy o encaminha para o servidor de destino.
- O servidor de destino responde ao proxy.
- O proxy retorna a resposta para o Laravel.
Como resultado, o servidor de destino vê a solicitação proveniente do IP do proxy – não do seu servidor Laravel. Esse mecanismo ajuda a contornar restrições geográficas, melhorar o anonimato e gerenciar limites de taxa.
Casos de uso de proxies no Laravel
Os proxies no Laravel são úteis em muitos cenários, mas esses três são os mais comuns:
- Raspagem da Web: Use proxies para evitar proibições de IP, limites de taxa ou outros bloqueios ao criar uma API de raspagem da Web. Para saber mais, leia nosso tutorial sobre raspagem da Web com o Laravel.
- Contornar limites de taxa em APIs de terceiros: Alterne os IPs de proxy para permanecer dentro das cotas de uso da API e evitar a limitação.
- Acesso a conteúdo com restrição geográfica: Selecione servidores proxy em regiões específicas para acessar serviços disponíveis apenas em determinados países.
Para obter mais exemplos, consulte nosso guia sobre dados da Web e casos de uso de proxy.
Usando um proxy no Laravel: Guia passo a passo
Nesta seção, mostraremos como integrar um proxy no Laravel usando o cliente HTTP padrão. Se você for um usuário do Symfony HttpClient
, não se preocupe – abordaremos a integração do proxy com essa biblioteca mais adiante neste artigo.
Observação: o cliente HTTP do Laravel foi desenvolvido com base no Guzzle, portanto, talvez você queira consultar nosso guia de integração de proxy do Guzzle.
Para demonstrar a integração, criaremos um endpoint GET
/api/v1/get-ip
que:
- Envia uma solicitação
GET
parahttps://httpbin.io/ip
usando o proxy configurado. - Recupera o endereço IP de saída da resposta.
- Retorna esse IP para o cliente que está chamando o ponto de extremidade do Laravel.
Se tudo estiver configurado corretamente, o IP retornado por essa API corresponderá ao IP do proxy.
Vamos começar!
Etapa 1: Configuração do projeto
Se você já tiver um aplicativo Laravel configurado, poderá pular esta etapa e prosseguir para a Etapa 2.
Caso contrário, siga as instruções abaixo para criar um novo projeto do Laravel. Abra seu terminal e execute o seguinte comando create-command
do Composer para inicializar um novo projeto Laravel:
composer create-project laravel/laravel laravel-proxies-application
Esse comando gerará um novo projeto Laravel em uma pasta chamada laravel-proxies-application
. Abra essa pasta em seu IDE PHP preferido.
Nesse ponto, a pasta acima deve conter a estrutura de arquivos padrão do Laravel:
Maravilhoso! Agora você tem um projeto do Laravel instalado.
Etapa 2: definir o ponto de extremidade da API de teste
No diretório do projeto, execute o seguinte comando do Artisan para gerar um novo controlador:
php artisan make:controller IPController
Isso criará um arquivo chamado IPController.php
no diretório /app/Http/Controllers
com esse conteúdo padrão:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class IPController extends Controller
{
//
}
Agora, adicione o método getIP()
abaixo ao 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);
}
Esse método usa o cliente Http
do Laravel para buscar seu endereço IP em https://httpbin.io/ip
e o retorna como JSON.
Não se esqueça de importar essas duas importações:
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Http;
Como você deseja que seu aplicativo Laravel ofereça APIs sem estado, ative o roteamento de API usando o comando install:api
Artisan:
php artisan install:api
Para expor esse método por meio de um endpoint de API, adicione a seguinte rota ao arquivo routes/api.php
:
use App\Http\Controllers\IPController;
Route::get('/v1/get-ip', [IPController::class, 'getIP']);
Seu novo endpoint de API estará acessível em:
/api/v1/get-ip
Observação: lembre-se de que cada API do Laravel está disponível no caminho /api
por padrão.
É hora de testar o ponto de extremidade /api/v1/get-ip
!
Inicie o servidor de desenvolvimento do Laravel executando:
php artisan serve
Seu servidor agora deve estar escutando localmente na porta 8000
.
Faça uma solicitação GET
para o ponto de extremidade /api/v1/get-ip
usando cURL:
curl -X GET 'http://localhost:8000/api/v1/get-ip'
Observação: No Windows, substitua curl
por curl.exe
. Saiba mais em nosso guia sobre como enviar solicitações GET com o cURL.
Você deve receber uma resposta semelhante a:
{
"origin": "45.89.222.18"
}
A resposta acima é exatamente a mesma produzida pelo ponto de extremidade /ip
do HttpBin, o que confirma que sua API do Laravel está funcionando perfeitamente. Em particular, o endereço IP mostrado é o IP público de sua máquina. A seguir, vamos integrar um proxy para mascarar esse IP!
Etapa 3: Recuperar um proxy
Para usar um proxy em seu aplicativo Laravel, primeiro é necessário ter acesso a um servidor proxy em funcionamento.
Embora muitos sites ofereçam URLs de proxy gratuitos, é importante ser cauteloso – a manutenção da infraestrutura de proxy é cara. Se um serviço fornecer proxies gratuitamente, pergunte a si mesmo como ele está financiando isso. Muitas vezes, a resposta envolve práticas obscuras, como coleta de dados ou redirecionamento de tráfego.
Observação: os proxies gratuitos devem ser usados estritamente para fins de teste ou educacionais – nunca em ambientes de produção.
Se você precisar de proxies confiáveis, opte por provedores confiáveis que ofereçam testes gratuitos ou planos gratuitos limitados. Por exemplo, você pode experimentar nossos proxies gratuitos.
Agora, um URL de proxy típico tem a seguinte aparência:
<protocol>://<host>:<port>
Onde:
protocol
é o protocolo necessário para se conectar ao servidor proxy (por exemplo,http
,https
,socks5
)host
é o endereço IP ou o domínio do servidor proxyporta
é a porta usada para rotear o tráfego
Neste exemplo, suponha que o URL do proxy seja:
http://66.29.154.103:3128
Armazene isso em uma variável dentro do método getIP()
:
$proxyUrl = 'http://66.29.154.103:3128';
Chegou a hora de ver como usar um proxy com Http
no Laravel!
Etapa 4: Integrar o proxy no http
A integração de um proxy no Laravel usando o cliente Http
requer apenas uma pequena quantidade de configuração adicional:
$proxyUrl = 'http://66.29.154.103:3128';
$response = Http::withOptions([
'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');
$responseData = $response->json();
Como você pode ver, tudo o que você precisa fazer é passar o URL do proxy como uma opção usando o método withOptions()
. Isso informa ao cliente HTTP do Laravel para rotear a solicitação por meio do servidor proxy especificado, usando a opção de proxy
do Guzzle.
Incrível! Integração do proxy do Laravel concluída.
Etapa nº 5: Juntar tudo
Sua lógica final da API do Laravel com integração de proxy deve ter a seguinte aparência:
<?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);
}
}
Teste-o executando o Laravel localmente:
php artisan serve
E conecte-se novamente ao ponto de extremidade /api/v1/get-ip
:
curl -X GET 'http://localhost:8000/api/v1/get-ip'
Dessa vez, o resultado deve ser algo como:
{
"origin": "66.29.154.103"
}
O campo "origin"
mostra o endereço IP do servidor proxy, confirmando que seu IP real agora está oculto por trás do proxy.
Aviso: Os servidores proxy gratuitos geralmente são instáveis ou têm vida curta. No momento em que você tentar fazer isso, o proxy de exemplo poderá não funcionar mais. Se necessário, substitua o $proxyUrl
por um que esteja ativo no momento antes de testar.
Observação: se você encontrar erros de SSL ao fazer a solicitação, consulte as dicas de solução de problemas fornecidas na seção de casos de uso avançado abaixo.
Casos de uso de avanços
Você acabou de aprender os conceitos básicos da integração de proxy com o Laravel, mas há outros cenários mais avançados a serem considerados.
Autenticação de proxy
Os proxies premium geralmente exigem autenticação para que somente usuários autorizados possam acessá-los. Nesse caso, se você não especificar as credenciais corretas, receberá esse erro:
cURL error 56: CONNECT tunnel failed, response 407
O URL de um proxy autenticado normalmente segue este formato:
<protocol>://<username>:<password>@<host>:<port>
Onde nome de usuário
e senha
são suas credenciais de autenticação.
A classe Http
do Laravel (que é baseada no Guzzle) oferece suporte total a proxies autenticados. Portanto, você não precisa mudar muita coisa. Basta incluir as credenciais de autenticação diretamente no URL do proxy:
$proxyUrl = '<protocol>://<username>:<password>@<host>:<port>';
Por exemplo:
// authenticated proxy with username and password
$proxyUrl = 'http://<username>:<password>@<host>:<port>';
$response = Http::withOptions([
'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');
Substitua o valor de $proxyUrl
por um URL de proxy autenticado válido.
O Http
agora encaminhará o tráfego para o servidor proxy autenticado configurado!
Evite problemas com o certificado SSL
Ao configurar um proxy usando o cliente Http
do Laravel, suas solicitações podem falhar devido a erros de verificação do certificado SSL, como:
cURL error 60: SSL certificate problem: self-signed certificate in certificate chain
Isso geralmente ocorre quando o servidor proxy usa um certificado SSL autoassinado.
Se você confiar no servidor proxy e estiver testando apenas localmente ou em um ambiente seguro, poderá desativar a verificação SSL desta forma:
$response = Http::withOptions([
'proxy' => $proxyUrl,
'verify' => false, // disable SSL certificate verification
])->get('https://httpbin.io/ip');
Aviso: A desativação da verificação SSL expõe você a ataques do tipo man-in-the-middle. Portanto, use essa opção somente em ambientes confiáveis.
Caso contrário, se você tiver o arquivo de certificado do servidor proxy (por exemplo, proxy-ca.crt
), poderá usá-lo para verificação de SSL da seguinte forma:
$response = Http::withOptions([
'proxy' => $proxyUrl,
'verify' => storage_path('certs/proxy-ca.crt'), // Path to the CA bundle
])->get('https://httpbin.io/ip');
Certifique-se de que o arquivo proxy-ca.crt
esteja armazenado em um diretório seguro e acessível (por exemplo, storage/certs/
) e que o Laravel tenha permissão para lê-lo.
Com qualquer um dos métodos implementados, o erro de verificação de SSL causado pelo proxy deve desaparecer.
Rotação de proxy
Se você continuar usando o mesmo servidor proxy repetidamente, é provável que o site de destino acabe detectando e bloqueando o endereço IP desse proxy. Para evitar isso, você pode alternar seus servidores proxy, usandoum diferente para cada solicitação.
Estas são as etapas para rotacionar proxies no Laravel:
- Criar uma matriz contendo vários URLs de proxy
- Selecione aleatoriamente um antes de cada solicitação
- Definir o proxy selecionado na configuração do cliente HTTP
Implemente isso com este código:
<?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);
}
}
O snippet acima demonstra como selecionar aleatoriamente um proxy de uma lista para simular a rotação de proxy. Embora essa abordagem funcione, ela tem algumas desvantagens:
- Você precisa manter um pool de servidores proxy confiáveis, o que geralmente tem um custo.
- Para uma rotação eficaz, o pool de proxies precisa ser grande o suficiente. Sem um pool grande, os mesmos proxies serão usados repetidamente, o que pode levar à detecção e ao bloqueio.
Para contornar essas limitações, considere tirar proveito da rede de proxy rotativo da Bright Data. Essa infraestrutura faz a rotação automática dos endereços IP em seu nome e lhe dá acesso a:
- Mais de 1500 milhões de IPs em 195 países
- Proxies residenciais, de data center, ISP e móveis
- Alto tempo de atividade e uma taxa de sucesso de 99,9%
Na próxima seção, mostraremos como usar os proxies rotativos da Bright Data com o Laravel.
Usar um proxy de dados Bright no Laravel
A Bright Data opera uma das maiores redes de proxy do mundo, dando suporte a empresas da Fortune 500 e a mais de 20.000 clientes. Sua rede de proxy inclui:
- Proxies de datacenter – Mais de 770.000 IPs de datacenter.
- Proxies residenciais – Mais de 150.000.000 de IPs residenciais em mais de 195 países.
- Proxies de ISP – Mais de 700.000 IPs de ISP.
- Proxies móveis – Mais de 7.000.000 de IPs móveis.
Siga as etapas abaixo para usar os proxies residenciais da Bright Data com o Laravel.
Se você ainda não tiver uma conta, inscreva-se na Bright Data. Se já tiver uma, faça o login para acessar o painel de controle do usuário:
Depois de fazer o login, clique no botão “Get proxy products” para continuar:
Você será redirecionado para a página “Proxies & Scraping Infrastructure”:
Na tabela, localize a linha “Residential” e clique nela:
Você será direcionado para a página de proxy residencial:
Se for sua primeira vez, siga o assistente para configurar o serviço de proxy de acordo com suas necessidades. Para obter mais assistência, sinta-se à vontade para entrar em contato com o suporte 24 horas por dia, 7 dias por semana.
Na guia “Overview” (Visão geral), encontre o host, a porta, o nome de usuário e a senha do seu proxy:
Use esses detalhes para criar seu URL de proxy:
$proxyUrl = 'http://<brightdata_proxy_username>:<brightdata_proxy_password>@<brightdata_proxy_host>:<brightdata_proxy_port>';
Substitua os espaços reservados (,
,
,
) com suas credenciais reais de proxy.
Certifique-se de alternar a configuração “Off” para ativar o produto proxy e siga o restante das instruções para concluir a configuração:
Com o URL do proxy configurado, agora você pode integrá-lo ao Laravel usando o cliente Http
. Aqui está a lógica para enviar uma solicitação por meio do proxy residencial rotativo da Bright Data no 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);
}
Toda vez que executar o script acima, você verá um IP de saída diferente.
A rotação de proxy do Laravel nunca foi tão fácil com os proxies de rotação automática da Bright Data!
[Extra] Integração do proxy HttpClient
do Symfony
Suponha que você prefira o componente HttpClient
do Symfony em vez do cliente HTTP padrão do Laravel, o Http
.
Siga as instruções abaixo para implementar a integração de proxy no HttpClient
com o Laravel.
Primeiro, você precisa instalar o pacote do cliente HTTP do Symfony por meio do Composer:
composer require symfony/http-client
Em seguida, você pode usar o HttpClient
do Symfony com um proxy da seguinte forma:
<?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);
}
}
Essa configuração permite que você use o HttpClient
do Symfony para enviar solicitações por meio de um proxy.
Conclusão
Neste tutorial de integração de proxy, você aprendeu por que os proxies são importantes e como usá-los no Laravel. Abordamos como configurar facilmente proxies no Laravel, tanto com o cliente HTTP padrão do Laravel quanto com o HttpClient
do Symfony.
Você também viu por que os serviços de proxy gratuitos podem não ser confiáveis e até mesmo arriscados. Para obter desempenho estável, segurança e escalabilidade, você deve escolher um provedor de proxy confiável. Economize tempo e energia e vá direto ao melhor provedor de proxy do mercado, a Bright Data.
Crie uma conta e comece a testar nossos proxies gratuitamente hoje mesmo!
Não é necessário cartão de crédito