---
title: "Como configurar um proxy com o Guzzle"
slug: proxy-with-guzzle
date: 2024-03-17T11:44:58+00:00
modified: 2025-09-16T16:40:44+00:00
permalink: https://brightdata.com.br/blog/procedimentos/proxy-with-guzzle
type: blog
---

[ Blog ](https://brightdata.com.br/blog "Blog") / [procedimentos](https://brightdata.com.br/blog/procedimentos)







 [procedimentos](https://brightdata.com.br/blog/procedimentos)

# Como configurar um proxy com o Guzzle

Navegue pelos desafios da extração de dados da web usando o Guzzle e proxies. Certifique-se de que o PHP 7.2.5+ e o Composer estejam prontos e, em seguida, integre o Guzzle para a configuração do proxy.

 2 min de leitura





 [ ![Man with beard smiling, wearing black shirt.](https://media.brightdata.com.br/2021/07/avivb-50x50.png) ](https://brightdata.com/blog/authors/aviv-besinsky)

 [Aviv Besinsky

 ](https://brightdata.com/blog/authors/aviv-besinsky)





 ![Setting a proxy in Guzzle blog image](https://media.brightdata.com.br/2024/03/Setting-Proxy-in-Guzzle.svg)





No contexto da utilização do Guzzle, [um proxy](https://brightdata.com.br/blog/proxies-101/what-is-proxy-server) atua como um servidor intermediário que conecta seu aplicativo cliente ao servidor web pretendido. Ele facilita o encaminhamento das suas solicitações para o servidor desejado e retorna a resposta do servidor ao seu cliente. Além disso, os proxies são fundamentais para contornar as restrições baseadas em IPs que podem [bloquear atividades de extração de dados da web](https://brightdata.com.br/blog/dados-do-site/web-scraping-without-getting-blocked) ou limitar o acesso a determinados sites, além de oferecerem benefícios como armazenar em cache as respostas do servidor para reduzir o número de solicitações diretas ao servidor de destino.

Esta introdução descreve os fundamentos para a utilização eficaz de um proxy com o Guzzle.

## Requisitos para os primeiros passos — como integrar

Antes de continuar, certifique-se de ter a versão 7.2.5 ou superior do PHP e o Composer instalado em seu sistema. Também será benéfico compreender as noções básicas de [extração de dados da web com PHP](https://brightdata.com.br/blog/procedimentos/web-scraping-php) para acompanhar este guia. Comece criando um novo diretório para o seu projeto e use o Composer para instalar o Guzzle dentro dele:

```none
composer require guzzlehttp/guzzle

```

Em seguida, crie um arquivo PHP dentro do diretório recém-estabelecido e inclua o carregador automático do Composer para continuar:

```none
<?php
// Load Composer's autoloader
require 'vendor/autoload.php';
```

Feito isso, estaremos prontos para configurar o proxy.

## Como utilizar um proxy com o Guzzle

Este segmento demonstra como emitir uma solicitação por meio do Guzzle usando um proxy e como autenticá-la. Inicialmente, forneça os proxies, garantindo que estejam ativos e sigam o formato: ://:@:.

**Informação importante:** o Guzzle permite o uso de proxies por meio de opções de solicitação ou middlewares. Para configurações simples e inalteradas de proxies, as opções de solicitação são adequadas. Por outro lado, middlewares oferecem maior flexibilidade e controle, embora com maior necessidade de configuração inicial.

Vamos nos aprofundar nas duas abordagens, começando com as opções de solicitação, envolvendo a importação das classes Client e RequestOptions do Guzzle para configuração.

## Método A: configurar um proxy com o Guzzle com opções de solicitação

Para configurar um proxy com opções de solicitação, comece importando as classes Client e RequestOptions do Guzzle:

```none
use GuzzleHttpClient;
use GuzzleHttpRequestOptions;
```

Em seguida, defina seu URL de destino e uma matriz associativa de todos os proxies que você usará:

```none
# make request to
$targetUrl = 'https://lumtest.com/myip.json';

# proxies
$proxies = [
    'http'  => 'http://USERNAME:<a class="__cf_email__" data-cfemail="c292839191958d908682a0b0a6ecb1b7b2a7b0b2b0adbabbecabad" href="/cdn-cgi/l/email-protection">[email protected]</a>:22225',
    'https' => 'http://USERNAME:<a class="__cf_email__" data-cfemail="e8b8a9bbbbbfa7baaca88a9a8cc69b9d988d9a989a879091c68187" href="/cdn-cgi/l/email-protection">[email protected]</a>:22225',
];

```

O URL de destino especificado, lumtest, foi projetado para retornar o endereço IP de qualquer cliente que emita uma solicitação GET para ele. Essa configuração permite que o Guzzle gerencie tráfego HTTP e HTTPS, encaminhando-o por meio dos [proxies HTTP e HTTPS designados](https://brightdata.com.br/solutions/https-proxies), conforme cada caso.

Em seguida, iniciaremos uma instância do cliente Guzzle, incorporando os proxies definidos anteriormente, atribuindo-os à opção de proxy na configuração do Guzzle.

```none
$client = new Client([
RequestOptions::PROXY => $proxies,
RequestOptions::VERIFY => false, # disable SSL certificate validation
RequestOptions::TIMEOUT => 30, # timeout of 30 seconds
]);
```

Devido ao fato de os [servidores de proxies](https://brightdata.com.br/proxy-types/proxy-servers) frequentemente encontrarem problemas com a verificação SSL, essa configuração opta por desativá-la por meio da opção de verificação. Além disso, a configuração de tempo limite restringe a duração de cada solicitação para no máximo trinta segundos. Após essa configuração, executaremos a solicitação e exibiremos a resposta resultante.

```none
try {
$body = $client->get($targetUrl)->getBody();
echo $body->getContents();
} catch (Exception $e) {
echo $e->getMessage();
}
```

Agora, seu script PHP deverá estar assim:

```none
'http://USERNAME:<a class="__cf_email__" data-cfemail="acfcedfffffbe3fee8eccedec882dfd9dcc9dedcdec3d4d582c5c3" href="/cdn-cgi/l/email-protection">[email protected]</a>:22225', 'https' => 'http://USERNAME:<a class="__cf_email__" data-cfemail="4212031111150d1006022030266c313732273032302d3a3b6c2b2d" href="/cdn-cgi/l/email-protection">[email protected]</a>:22225', ]; $client = new Client([ RequestOptions::PROXY => $proxies, RequestOptions::VERIFY => false, # disable SSL certificate validation RequestOptions::TIMEOUT => 30, # timeout of 30 seconds ]); try { $body = $client->get($targetUrl)->getBody(); echo $body->getContents(); } catch (Exception $e) { echo $e->getMessage(); } ?>
```

Execute seu script com o comando php .php e você receberá um resultado semelhante ao exemplo abaixo:

```none
{"ip":"212.80.220.187","country":"IE","asn":{"asnum":9009,"org_name":"M247 Europe SRL"},"geo":{"city":"Dublin","region":"L","region_name":"Leinster","postal_code":"D12","latitude":53.323,"longitude":-6.3159,"tz":"Europe/Dublin","lum_city":"dublin","lum_region":"l"}}
```

Excelente! O valor da chave ip corresponde ao endereço IP do cliente que estiver iniciando a solicitação para a lumtest. Nesse caso, ele deve refletir os proxies que você configurou.

## Abordagem B: utilizando um middleware

O emprego de um middleware para configurar um proxy HTTP no Guzzle segue um padrão semelhante ao do primeiro método. A única distinção está em criar e incorporar o middleware com proxy na pilha de handlers predefinidos.

Para começar, ajuste sua importação da seguinte forma:

```none
# ...
use PsrHttpMessageRequestInterface;
use GuzzleHttpHandlerStack;
# ...
```

Em seguida, estabeleça um middleware com proxy inserindo o código a seguir imediatamente após a sua matriz $proxies. Esse middleware interceptará cada solicitação e configurará os proxies conforme cada caso.

```none
function proxy_middleware(array $proxies)
{
    return function (callable $handler) use ($proxies) {
        return function (RequestInterface $request, array $options) use ($handler, $proxies) {
            # add proxy to request option
            $options[RequestOptions::PROXY] = $proxies;
            return $handler($request, $options);
        };
    };
}

```

Agora, podemos integrar o middleware na pilha de handlers predefinidos e atualizar nosso cliente Guzzle incorporando a pilha:

```none
$stack = HandlerStack::create();
$stack->push(proxy_middleware($proxies));

$client = new Client([
    'handler' => $stack,
    RequestOptions::VERIFY => false, # disable SSL certificate validation
    RequestOptions::TIMEOUT => 30, # timeout of 30 seconds
]);

```

Seu script PHP deverá estar assim:

```none
<?php
require 'vendor/autoload.php';
use GuzzleHttpClient;
use GuzzleHttpRequestOptions;
use PsrHttpMessageRequestInterface;
use GuzzleHttpHandlerStack;
# make request to
$targetUrl = 'https://lumtest.com/myip.json';

# proxies
$proxies = [
    'http'  => 'http://USERNAME:<a class="__cf_email__" data-cfemail="6b3b2a38383c24392f2b09190f45181e1b0e191b19041312450204" href="/cdn-cgi/l/email-protection">[email protected]</a>:22225',
    'https' => 'http://USERNAME:<a class="__cf_email__" data-cfemail="a0f0e1f3f3f7eff2e4e0c2d2c48ed3d5d0c5d2d0d2cfd8d98ec9cf" href="/cdn-cgi/l/email-protection">[email protected]</a>:22225',
];
function proxy_middleware(array $proxies)
{
    return function (callable $handler) use ($proxies) {
        return function (RequestInterface $request, array $options) use ($handler, $proxies) {
            # add proxy to request option
            $options[RequestOptions::PROXY] = $proxies;
            return $handler($request, $options);
        };
    };
}

$stack = HandlerStack::create();
$stack->push(proxy_middleware($proxies));

$client = new Client([
    'handler' => $stack,
    RequestOptions::VERIFY => false, # disable SSL certificate validation
    RequestOptions::TIMEOUT => 30, # timeout of 30 seconds
]);

try {
    $body = $client->get($targetUrl)->getBody();
    echo $body->getContents();
} catch (Exception $e) {
    echo $e->getMessage();
}

?>

```

Execute o script PHP mais uma vez e você obterá resultados semelhantes aos do outro método.

A implementação de um proxy rotativo com o Guzzle envolve a utilização de um servidor proxy que muda frequentemente os endereços IP. Essa abordagem ajuda a contornar o bloqueio de IPs, pois cada solicitação se origina de um IP distinto, complicando a identificação de bots originados de uma única fonte.

Começaremos implementando um proxy rotativo com o Guzzle. Isso é bastante fácil ao utilizar os [serviços de proxies da Bright Data](https://brightdata.com.br/proxy-types), por exemplo:

```none
function get_random_proxies(): array {
    // Base proxy URL before the session identifier
    $baseProxyUrl = 'http://USERNAME-session-';


    $sessionSuffix = rand(1000, 9999); // Random integer between 1000 and 9999
    $proxyCredentials = ':<a class="__cf_email__" data-cfemail="bdd18dccd9d18ecbd8d4dfd08ffddfcfd993cec8cdd8cfcdcfd2c5c493d4d2" href="/cdn-cgi/l/email-protection">[email protected]</a>:22225';

    $httpProxy = $baseProxyUrl . $sessionSuffix . $proxyCredentials;
    $httpsProxy = $baseProxyUrl . $sessionSuffix . $proxyCredentials;

    $proxies = [
        'http'  => $httpProxy,
        'https' => $httpsProxy,
    ];

    return $proxies;
}

```

Agora, adicione a função pretendida e chame-a:

```none
function rotating_proxy_request(string $http_method, string $targetUrl, int $max_attempts = 3): string
{
    $response = null;
    $attempts = 1;

    while ($attempts <= $max_attempts) {
        $proxies = get_random_proxies();
        echo "Using proxy: ".json_encode($proxies).PHP_EOL;
        $client = new Client([
            RequestOptions::PROXY => $proxies,
            RequestOptions::VERIFY => false, # disable SSL certificate validation
            RequestOptions::TIMEOUT => 30, # timeout of 30 seconds
        ]);
        try {
            $body = $client->request(strtoupper($http_method), $targetUrl)->getBody();
            $response = $body->getContents();
            break;
        } catch (Exception $e) {
            echo $e->getMessage().PHP_EOL;
            echo "Attempt ".$attempts." failed!".PHP_EOL;
            if ($attempts < $max_attempts) {
                echo "Retrying with a new proxy".PHP_EOL;
            }
            $attempts += 1;
        }
    }
    return $response;
}

$response = rotating_proxy_request('get', 'https://lumtest.com/myip.json');

echo $response;

```

Aqui está o script PHP completo:

```none
<?php
# composer's autoloader
require 'vendor/autoload.php';

use GuzzleHttpClient;
use GuzzleHttpRequestOptions;

function get_random_proxies(): array {
    // Base proxy URL before the session identifier
    $baseProxyUrl = 'http://USERNAME-session-';

    // Session ID suffix and proxy credentials
    $sessionSuffix = rand(1000, 9999); // Random integer between 1000 and 9999
    $proxyCredentials = ':<a class="__cf_email__" data-cfemail="adc19ddcc9c19edbc8c4cfc09fedcfdfc983ded8ddc8dfdddfc2d5d483c4c2" href="/cdn-cgi/l/email-protection">[email protected]</a>:22225';

    // Assemble the full proxy URLs with the randomized session ID
    $httpProxy = $baseProxyUrl . $sessionSuffix . $proxyCredentials;
    $httpsProxy = $baseProxyUrl . $sessionSuffix . $proxyCredentials;

    // Package and return the proxies
    $proxies = [
        'http'  => $httpProxy,
        'https' => $httpsProxy,
    ];

    return $proxies;
}

function rotating_proxy_request(string $http_method, string $targetUrl, int $max_attempts = 3): string
{
    $response = null;
    $attempts = 1;

    while ($attempts <= $max_attempts) {
        $proxies = get_random_proxies();
        echo "Using proxy: ".json_encode($proxies).PHP_EOL;
        $client = new Client([
            RequestOptions::PROXY => $proxies,
            RequestOptions::VERIFY => false, # disable SSL certificate validation
            RequestOptions::TIMEOUT => 30, # timeout of 30 seconds
        ]);
        try {
            $body = $client->request(strtoupper($http_method), $targetUrl)->getBody();
            $response = $body->getContents();
            break;
        } catch (Exception $e) {
            echo $e->getMessage().PHP_EOL;
            echo "Attempt ".$attempts." failed!".PHP_EOL;
            if ($attempts < $max_attempts) {
                echo "Retrying with a new proxy".PHP_EOL;
            }
            $attempts += 1;
        }
    }
    return $response;
}

$response = rotating_proxy_request('get', 'https://lumtest.com/myip.json');

echo $response;

```

## Conclusão

Neste guia, falamos sobre as etapas necessárias para integrar proxies com o Guzzle. Você aprendeu:

- Os fundamentos do emprego de um proxy ao trabalhar com o Guzzle.
- Estratégias para implementar um sistema de proxies rotativos.

A [Bright Data](/) oferece um [serviço confiável de proxies rotativos](https://brightdata.com.br/solutions/rotating-proxies) acessível por meio de chamadas de API, junto com recursos sofisticados projetados para contornar medidas antibots, aumentando a eficiência de seus esforços de extração de dados da web.



Contate-nosTeste grátis![google social icon](/wp-content/themes/brightdata/assets/images/ic_google.svg)









 Índice







Dedicated Scraper APIs &amp; No-Code Scrapers

Over 1000 scrapers for all popular domains. Simplify your web scraping.

[See pricing](/pricing/web-scraper "See pricing")

Just want data? Skip scraping.

Hundreds of ready-to-use datasets from all popular domains.

[See pricing](/pricing/datasets "See pricing")







 [ ](https://news.ycombinator.com/submitlink?t=Como+configurar+um+proxy+com+o+Guzzle&u=https://brightdata.com.br/blog/procedimentos/proxy-with-guzzle) [ ](https://www.linkedin.com/shareArticle?mini=true&title=Como+configurar+um+proxy+com+o+Guzzle&url=https://brightdata.com.br/blog/procedimentos/proxy-with-guzzle) [ ](http://www.reddit.com/submit?title=Como+configurar+um+proxy+com+o+Guzzle&url=https://brightdata.com.br/blog/procedimentos/proxy-with-guzzle)







##  Você também pode estar interessado em

 [ ![Setting Proxy in GO](https://media.brightdata.com.br/2024/03/Setting-Proxy-in-GO.svg) ](https://brightdata.com.br/blog/procedimentos/go-proxy-servers "Servidores proxy em Go – Guia de configuração de servidores proxy com Go")

 [procedimentos



 ![White number one with a flame on top.](https://media.brightdata.com.br/2023/03/Favicon-2-1-50x50.png)

Rexford A. Nyarko





### Servidores proxy em Go – Guia de configuração de servidores proxy com Go

Neste tutorial, você aprenderá a configurar um servidor proxy para web scraping em Go.



 03-Mar-2024

 16 min de leitura

 ](https://brightdata.com.br/blog/procedimentos/go-proxy-servers)

 [ ![PHP Proxy Server How to Set Up Proxies in PHP](https://media.brightdata.com.br/2024/02/PHP-Proxy-Server-How-to-Set-Up-Proxies-in-PHP.svg) ](https://brightdata.com.br/blog/procedimentos/php-proxy-servers "Servidor proxy em PHP: como configurar proxies em PHP")

 [procedimentos



 ![](https://media.brightdata.com.br/2024/02/Marshall-Chikari-50x50.png)

Marshall Chikari





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



 28-Feb-2024

 3 min de leitura

 ](https://brightdata.com.br/blog/procedimentos/php-proxy-servers)

 [ ![Configuring Proxy Settings in C# Code](https://media.brightdata.com.br/2024/02/Setting-Proxy-in-C.svg) ](https://brightdata.com.br/blog/procedimentos/proxy-with-c-sharp "Como configurar servidores proxy em C#")

 [procedimentos



 ![White number one with a flame on top.](https://media.brightdata.com.br/2023/03/Favicon-2-1-50x50.png)

Abnoan Muniz





### Como configurar servidores proxy em C#

Aprenda a implementar proxies em C# para web scraping, aprimorando a privacidade e a eficiência em projetos de extração de dados com Visual Studio e o .NET 7.



 28-Feb-2024

 18 min de leitura

 ](https://brightdata.com.br/blog/procedimentos/proxy-with-c-sharp)
