Ao final deste guia de integração de proxy no Laravel, você entenderá:
- O que são proxies e como funcionam no Laravel
- Quando e por que você pode precisar deles
- Como configurar um proxy no 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
HttpClientdo Symfony
Vamos começar!
O Que É um Proxy no Laravel?
Um proxy no Laravel atua como intermediário entre seu backend Laravel e um servidor externo. Ele permite rotear programaticamente o tráfego do seu servidor através de um servidor proxy para ocultar seu endereço IP.
Veja abaixo como um proxy no Laravel funciona:
- 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 a encaminha ao servidor de destino.
- O servidor de destino responde ao proxy.
- O proxy então retorna a resposta ao Laravel.
Como resultado, o servidor de destino vê a solicitação vindo 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
Proxies no Laravel são úteis em muitos cenários, mas estes três são os mais comuns:
- Scraping de dados: Use proxies para evitar banimentos de IP, limites de taxa ou outros bloqueios ao construir uma API de scraping de dados. Para mais informações, leia nosso tutorial sobre scraping de dados com Laravel.
- Contornar limites de taxa em APIs de terceiros: Alterne IPs de proxy para permanecer dentro das cotas de uso de API e evitar limitação.
- Acessar conteúdo restrito geograficamente: Selecione servidores proxy em regiões específicas para acessar serviços disponíveis apenas em determinados países.
Para mais exemplos, veja nosso guia sobre casos de uso de dados web e proxies.
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ê é um usuário do HttpClient do Symfony, não se preocupe—abordaremos a integração de proxy com essa biblioteca mais adiante no artigo.
Nota: O cliente HTTP do Laravel é construído sobre o Guzzle, então você pode querer conferir nosso guia de integração de proxy com Guzzle.
Para demonstrar a integração, criaremos um endpoint GET /api/v1/get-ip que:
- Envia uma solicitação
GETparahttps://httpbin.io/ipusando o proxy configurado. - Recupera o endereço IP de saída da resposta.
- Retorna esse IP ao cliente que chama o endpoint Laravel.
Se tudo estiver configurado corretamente, o IP retornado por essa API corresponderá ao IP do proxy.
Vamos começar!
Passo #1: Configuração do Projeto
Se você já tem uma aplicação Laravel configurada, pode pular este passo e ir para o Passo #2.
Caso contrário, siga as instruções abaixo para criar um novo projeto Laravel. Abra seu terminal e execute o seguinte comando Composer create-command para inicializar um novo projeto Laravel:
composer create-project laravel/laravel laravel-proxies-application
Este comando gerará um novo projeto Laravel em uma pasta chamada laravel-proxies-application. Abra essa pasta em sua IDE PHP preferida.
Neste ponto, a pasta acima deve conter a estrutura padrão de arquivos do Laravel:

Maravilha! Agora você tem um projeto Laravel pronto.
Passo #2: Definir o Endpoint da API de Teste
No diretório do projeto, execute o seguinte comando 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 este conteúdo padrão:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class IPController extends Controller
{
//
}
Agora, adicione o método getIP() abaixo em IPController.php:
public function getIP(): JsonResponse
{
// faz uma solicitação GET ao endpoint "/ip" para obter o IP do servidor
$response = Http::get('https://httpbin.io/ip');
// recupera os dados da resposta
$responseData = $response->json();
// retorna os dados da resposta
return response()->json($responseData);
}
Este método usa o cliente Http do Laravel para buscar seu endereço IP de https://httpbin.io/ip e retorná-lo como JSON.
Não se esqueça de adicionar estas duas importações:
use IlluminateHttpJsonResponse;
use IlluminateSupportFacadesHttp;
Como você quer que sua aplicação Laravel ofereça APIs sem estado, habilite o roteamento de API usando o comando Artisan install:api:
php artisan install:api
Para expor esse método via endpoint de API, adicione a seguinte rota ao arquivo routes/api.php:
use AppHttpControllersIPController;
Route::get('/v1/get-ip', [IPController::class, 'getIP']);
Seu novo endpoint de API estará acessível em:
/api/v1/get-ip
Nota: Lembre-se de que cada API do Laravel está disponível sob o caminho /api por padrão.
Hora de testar o endpoint /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 ao endpoint /api/v1/get-ip usando cURL:
curl -X GET 'http://localhost:8000/api/v1/get-ip'
Nota: No Windows, substitua curl por curl.exe. Saiba mais em nosso guia sobre como enviar solicitações GET com cURL.
Você deve obter uma resposta similar a:
{
"origin": "45.89.222.18"
}
A resposta acima é exatamente igual à produzida pelo endpoint /ip do HttpBin, o que confirma que sua API Laravel está funcionando perfeitamente. Em particular, o endereço IP mostrado é o IP público da sua máquina. A seguir, vamos integrar um proxy para mascarar esse IP!
Passo #3: Obter um Proxy
Para usar um proxy em sua aplicação Laravel, primeiro você precisa de acesso a um servidor proxy funcional.
Embora muitos sites ofereçam URLs de proxy gratuitas, é importante ter cautela—manter infraestrutura de proxy é custoso. Se um serviço fornece proxies de graça, pergunte-se como estão financiando isso. Frequentemente, a resposta envolve práticas duvidosas como coleta de dados ou redirecionamento de tráfego.
Nota: Proxies gratuitos devem ser usados estritamente para testes ou fins educacionais—nunca em ambientes de produção.
Se você precisa de proxies confiáveis, opte por provedores confiáveis que ofereçam testes gratuitos ou planos gratuitos limitados.
Agora, uma URL de proxy típica se parece com isto:
<protocol>://<host>:<port>
Onde:
protocolé o protocolo necessário para conectar ao servidor proxy (ex.:http,https,socks5)hosté o endereço IP ou domínio do servidor proxyporté a porta usada para rotear o tráfego
Neste exemplo, suponha que sua URL de 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';
Hora de ver como usar um proxy com Http no Laravel!
Passo #4: Integrar o Proxy no Http
Integrar um proxy no Laravel usando o cliente Http requer apenas uma pequena 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 a URL do proxy como uma opção usando o método withOptions(). Isso diz ao cliente HTTP do Laravel para rotear a solicitação através do servidor proxy especificado, usando a opção proxy do Guzzle.
Incrível! Integração de proxy no Laravel concluída.
Passo #5: Juntando Tudo
Sua lógica final da API Laravel com integração de proxy deve agora se parecer com isto:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateHttpJsonResponse;
use IlluminateSupportFacadesHttp;
class IPController extends Controller
{
public function getIP(): JsonResponse
{
// a URL do servidor proxy
$proxyUrl = 'http://66.29.154.103:3128'; // substitua pela sua URL de proxy
// faz uma solicitação GET ao endpoint /ip através do servidor proxy
$response = Http::withOptions([
'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');
// recupera os dados da resposta
$responseData = $response->json();
// retorna os dados da resposta
return response()->json($responseData);
}
}
Teste executando o Laravel localmente:
php artisan serve
E conecte-se ao endpoint /api/v1/get-ip novamente:
curl -X GET 'http://localhost:8000/api/v1/get-ip'
Desta vez, a saída 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 atrás do proxy.
Aviso: Servidores proxy gratuitos costumam ser instáveis ou de curta duração. Quando você tentar isso, o proxy de exemplo pode não funcionar mais. Se necessário, substitua $proxyUrl por um que esteja ativo no momento antes de testar.
Nota: Se você encontrar erros de SSL ao fazer a solicitação, veja as dicas de solução de problemas fornecidas na seção de casos de uso avançados abaixo.
Casos de Uso Avançados
Você acabou de aprender o básico da integração de proxy com Laravel, mas há outros cenários mais avançados a considerar.
Autenticação de Proxy
Proxies premium geralmente exigem autenticação para que apenas usuários autorizados possam acessá-los. Nesse caso, se você não especificar as credenciais corretas, obterá este erro:
cURL error 56: CONNECT tunnel failed, response 407
A URL de um proxy autenticado geralmente segue este formato:
<protocol>://<username>:<password>@<host>:<port>
Onde username e password são suas credenciais de autenticação.
A classe Http do Laravel (que é baseada em Guzzle por baixo dos panos) oferece suporte completo a proxies autenticados. Portanto, você não precisa mudar muito. Basta incluir as credenciais de autenticação diretamente na URL do proxy:
$proxyUrl = '<protocol>://<username>:<password>@<host>:<port>';
Por exemplo:
// proxy autenticado com usuário e senha
$proxyUrl = 'http://<username>:<password>@<host>:<port>';
$response = Http::withOptions([
'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');
Substitua o valor de $proxyUrl por uma URL de proxy autenticado válida.
O Http agora roteará o tráfego para o servidor proxy autenticado configurado!
Evitar Problemas de Certificado SSL
Ao configurar um proxy usando o cliente Http do Laravel, suas solicitações podem falhar devido a erros de verificação de 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ê confia no servidor proxy e está apenas testando localmente ou em um ambiente seguro, você pode desabilitar a verificação SSL desta forma:
$response = Http::withOptions([
'proxy' => $proxyUrl,
'verify' => false, // desabilita a verificação do certificado SSL
])->get('https://httpbin.io/ip');
Aviso: Desabilitar a verificação SSL o expõe a ataques man-in-the-middle. Portanto, use essa opção apenas em ambientes confiáveis.
Caso contrário, se você tiver o arquivo de certificado do servidor proxy (ex.: proxy-ca.crt), você pode usá-lo para verificação SSL desta forma:
$response = Http::withOptions([
'proxy' => $proxyUrl,
'verify' => storage_path('certs/proxy-ca.crt'), // Caminho para o pacote CA
])->get('https://httpbin.io/ip');
Certifique-se de que o arquivo proxy-ca.crt esteja armazenado em um diretório seguro e acessível (ex.: storage/certs/), e que o Laravel tenha permissão para lê-lo.
Com qualquer um dos métodos aplicados, o erro de verificação SSL causado pelo proxy deve desaparecer.
Rotação de Proxy
Se você continuar usando o mesmo servidor proxy repetidamente, o site de destino provavelmente acabará detectando e bloqueando o endereço IP desse proxy. Para evitar isso, você pode alternar seus servidores proxy—usando um diferente para cada solicitação.
Estes são os passos para alternar proxies no Laravel:
- Crie um array contendo múltiplas URLs de proxy
- Selecione um aleatoriamente antes de cada solicitação
- Defina o proxy selecionado na configuração do cliente HTTP
Implemente isso com este código:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateHttpJsonResponse;
use IlluminateSupportFacadesHttp;
function getRandomProxyUrl(): string
{
// uma lista de URLs de proxy válidas (substitua pelas suas URLs de proxy)
$proxies = [
'<protocol_1>://<proxy_host_1>:<port_1>',
// ...
'<protocol_n>://<proxy_host_n>:<port_n>',
];
// retorna uma URL de proxy escolhida aleatoriamente da lista
return $proxies[array_rand($proxies)];
}
class IPController extends Controller
{
public function getIP(): JsonResponse
{
// a URL do servidor proxy
$proxyUrl = getRandomProxyUrl();
// faz uma solicitação GET ao endpoint /ip através do servidor proxy
$response = Http::withOptions([
'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');
// recupera os dados da resposta
$responseData = $response->json();
// retorna os dados da resposta
return response()->json($responseData);
}
}
O trecho acima demonstra como selecionar aleatoriamente um proxy de uma lista para simular rotação de proxy. Embora essa abordagem funcione, ela tem algumas desvantagens:
- Você deve 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 aproveitar a rede de proxy rotativo da Bright Data. Essa infraestrutura alterna automaticamente os endereços IP em seu nome e oferece acesso a:
- Mais de 1500M de IPs em 195 países
- 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 Laravel.
Usar um Proxy da Bright Data no Laravel
A Bright Data opera uma das maiores redes de proxy do mundo, apoiando empresas da Fortune 500 e 50,000+ clientes. A rede de proxies deles inclui:
- Proxies de datacenter – 1,300,000+ IPs de datacenter.
- Proxies residenciais – 400M+ IPs residenciais em mais de 195 países.
- Proxies ISP – 1,300,000+ IPs ISP.
Siga os passos abaixo para usar os proxies residenciais da Bright Data com Laravel.
Se você ainda não tem uma conta, vá em frente e cadastre-se na Bright Data. Se já tiver uma, faça login para acessar seu painel de usuário:

Depois de logado, clique no botão “Get proxy products” para continuar:

Você será redirecionado para a página “Proxies & Scraping Infrastructure”:

Na tabela, encontre a linha “Residential” e clique nela:

Você será direcionado à 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 mais assistência, sinta-se à vontade para entrar em contato com o suporte 24/7.
Na aba “Overview”, encontre o host, porta, usuário e senha do seu proxy:

Use esses detalhes para construir sua URL de proxy:
$proxyUrl = 'http://<brightdata_proxy_username>:<brightdata_proxy_password>@<brightdata_proxy_host>:<brightdata_proxy_port>';
Substitua os placeholders (<brightdata_proxy_username>, <brightdata_proxy_password>, <brightdata_proxy_host>, <brightdata_proxy_port>) por suas credenciais de proxy reais.
Certifique-se de alternar a configuração de “Off” para ativar o produto de proxy e siga o restante das instruções para concluir a configuração:

Com sua URL de proxy configurada, agora você pode integrá-la no Laravel usando o cliente Http. Aqui está a lógica para enviar uma solicitação via proxy residencial rotativo da Bright Data no Laravel:
public function getIp()
{
// TODO: substitua os placeholders com as informações do proxy da Bright Data
$proxyUrl = 'http://<brightdata_proxy_username>:<brightdata_proxy_password>@<brightdata_proxy_host>:<brightdata_proxy_port>';
// faz uma solicitação GET ao "/ip" através do proxy
$response = Http::withOptions([
'proxy' => $proxyUrl,
])->get('https://httpbin.org/ip');
// obtém os dados da resposta
$responseData = $response->json();
return response()->json($responseData);
}
Toda vez que você executar o script acima, verá um IP de saída diferente.
A rotação de proxy no Laravel nunca foi tão fácil com os proxies de rotação automática da Bright Data!
[Extra] Integração de Proxy com HttpClient do Symfony
Suponha que você prefira o componente HttpClient do Symfony em vez do cliente HTTP padrão do Laravel, Http.
Siga as instruções abaixo para implementar a integração de proxy no HttpClient com Laravel.
Primeiro, você precisa instalar o pacote cliente HTTP do Symfony via Composer:
composer require symfony/http-client
Em seguida, você pode usar o HttpClient do Symfony com um proxy da seguinte forma:
<?php
namespace AppHttpControllers;
use SymfonyContractsHttpClientHttpClientInterface;
use IlluminateHttpJsonResponse;
class IpController extends Controller
{
// onde armazenar a instância do HttpClient
private $client;
public function __construct(HttpClientInterface $client)
{
// inicializa a instância privada do HttpClient
$this->client = $client;
}
public function getIp(): JsonResponse
{
// sua URL de proxy
$proxyUrl = 'http://66.29.154.103:3128'; // substitua pela sua URL de proxy
// faz uma solicitação GET ao endpoint "/ip" através do proxy
$response = $this->client->request('GET', 'https://httpbin.io/ip', [
'proxy' => $proxyUrl,
]);
// analisa o JSON da resposta e o retorna
$responseData = $response->toArray();
return response()->json($responseData);
}
}
Essa configuração permite que você use o HttpClient do Symfony para enviar solicitações através 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. Cobrimos 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 ser pouco confiáveis e até arriscados. Para 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 hoje mesmo!