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.
28 min read
Setting Proxy in GO

Todas as interações na internet exigem o uso de um endereço IP. Os sites usam esse endereço IP para identificar o usuário ou usuários e determinar sua localização e outros metadados, como seu ISP, fuso horário ou tipo de dispositivo. Os servidores web usam essas informações para ajudar a personalizar ou restringir conteúdo ou recursos. Isso significa que, durante o web scraping, os sites podem bloquear solicitações originadas do seu endereço IP se considerarem que o padrão ou o comportamento do tráfego são incomuns, semelhantes a bots ou mal-intencionados. Felizmente, servidores proxy podem ajudar.

Um servidor proxy é um servidor intermediário que atua como um portal entre o usuário e a internet. Ele recebe solicitações dos usuários, as encaminha para os recursos web e, em seguida, retorna para os usuários os dados buscados. Um servidor proxy ajuda você a navegar e extrair dados discretamente, ocultando seu endereço IP real, aumentando a segurança, a privacidade e o anonimato.

Os servidores proxy também ajudam a contornar os banimentos de IP alterando seu endereço IP, fazendo parecer que as solicitações vêm de usuários diferentes. Servidores proxy localizados em diferentes regiões permitem que você acesse conteúdo geoespecífico, como filmes ou notícias, ignorando o bloqueio geográfico.

Neste tutorial, você aprenderá a configurar um servidor proxy para web scraping em Go. Você também aprenderá sobre os servidores proxy da Bright Data e como eles podem ajudar você a simplificar esse processo.

Configurar um servidor proxy

Neste tutorial, você aprenderá a modificar um aplicativo web scraper escrito em Go para interagir com o site It’s FOSS por meio de um servidor proxy local ou auto-hospedado. Este tutorial pressupõe que você já tenha seu ambiente de desenvolvimento Go configurado.

Para começar, você precisa configurar seu servidor proxy usando o Squid, um software de servidor proxy de código aberto. Se você estiver familiarizado com outro software de servidor proxy, poderá usá-lo no lugar. O artigo a seguir usa o Squid em um box Linux Fedora 39. Na maioria das distribuições Linux, o Squid vem incluído nos repositórios padrão. Você também pode verificar a documentação para baixar os pacotes necessários para o seu sistema operacional.

No seu terminal, execute o seguinte comando para instalar o Squid:

dnf install squid -y

Depois de concluído, inicie o serviço executando o seguinte comando:

sudo systemctl enable --now squid

Verifique o status do serviço usando este comando:

sudo systemctl status squid

Sua saída deve ser semelhante a esta:

Servidores proxy em Go

Isso indica que o serviço está ativo e em execução. Por padrão, o Squid executa e escuta solicitações na porta 3128. Use o seguinte comando curl para testar a comunicação por meio do servidor proxy:

curl --proxy 127.0.0.1:3128 "http://lumtest.com/myip.json"

Sua resposta deve ficar assim:

curl --proxy 127.0.0.1:3128 "http://lumtest.com/myip.json"
{"ip":"196.43.196.126","country":"GH","asn":{"asnum":327695,"org_name":"AITI"},"geo":{"city":"","region":"","region_name":"","postal_code":"","latitude":8.1,"longitude":-1.2,"tz":"Africa/Accra"}}

Os metadados devem incluir seu endereço IP público, o país e a organização que os possuem. Também confirma que você instalou com sucesso um servidor proxy funcional.

Configurar o Demo Scraper

Para facilitar o acompanhamento, um aplicativo web scraper simples em Go está disponível neste repositório do GitHub. O scraper captura o título, um trecho e as categorias das postagens mais recentes do blog em It’s FOSS, um blog popular que discute produtos de software de código aberto. O scraper então visita Lumtest para obter informações sobre o endereço IP usado pelo cliente HTTP do scraper para interagir com a web. A mesma lógica é implementada usando três pacotes Go diferentes: Colly, goquery e Selenium. Na próxima seção, você aprenderá como modificar cada implementação para usar um servidor proxy.

Comece clonando o repositório executando o seguinte comando em seu terminal/shell favorito:

$ git clone https://github.com/rexfordnyrk/go_scrap_proxy.git

Esse repositório consiste em dois branches: o branch main , que contém o código completo, e o branch basic , que contém o código inicial que você modificará. Use o comando a seguir para fazer o checkout para o branch basic:

$ git checkout basic

Esse branch contém três arquivos .go para cada implementação de biblioteca do scraper sem um proxy configurado. Ele também contém um arquivo executável chromedriver, que é exigido pela implementação Selenium do scraper:

.
├── chromedriver
├── colly.go
├── go.mod
├── goquery.go
├── go.sum
├── LICENSE
├── README.md
└── selenium.go

1 directory, 8 files

Você pode executar qualquer um deles individualmente usando o comando go run com o nome do arquivo específico. Por exemplo, o comando a seguir executa o scraper com Colly:

go run ./colly.go 

Sua saída deve ser semelhante a esta:

$ go run ./colly.go

Article 0: {"category":"Newsletter ✉️","excerpt":"Unwind your new year celebration with new open-source projects, and keep an eye on interesting distro updates.","title":"FOSS Weekly #24.02: Mixing AI With Linux, Vanilla OS 2, and More"}
Article 1: {"category":"Tutorial","excerpt":"Wondering how to use tiling windows on GNOME? Try the tiling assistant. Here's how it works.","title":"How to Use Tiling Assistant on GNOME Desktop?"}
Article 2: {"category":"Linux Commands","excerpt":"The free command in Linux helps you gain insights on system memory usage (RAM), and more. Here's how to make good use of it.","title":"Free Command Examples"}
Article 3: {"category":"Gaming 🎮","excerpt":"Here are the best tips to make your Linux gaming experience enjoyable.","title":"7 Tips and Tools to Improve Your Gaming Experience on Linux"}
Article 4: {"category":"Newsletter ✉️","excerpt":"The first edition of FOSS Weekly in the year 2024 is here. See, what's new in the new year.","title":"FOSS Weekly #24.01: Linux in 2024, GDM Customization, Distros You Missed Last Year"}
Article 5: {"category":"Tutorial","excerpt":"Wondering which init service your Linux system uses? Here's how to find it out.","title":"How to Check if Your Linux System Uses systemd"}
Article 6: {"category":"Ubuntu","excerpt":"Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.","title":"Installing Packages From External Repositories in Ubuntu [Explained]"}
Article 7: {"category":"Troubleshoot 🔬","excerpt":"Getting a warning that the boot partition has no space left? Here are some ways you can free up space on the boot partition in Ubuntu Linux.","title":"How to Free Up Space in /boot Partition on Ubuntu Linux?"}
Article 8: {"category":"Ubuntu","excerpt":"Wondering which Ubuntu version you're using? Here's how to check your Ubuntu version, desktop environment and other relevant system information.","title":"How to Check Ubuntu Version Details and Other System Information"}

Check Proxy IP map[asn:map[asnum:29614 org_name:VODAFONE GHANA AS INTERNATIONAL TRANSIT] country:GH geo:map[city:Accra latitude:5.5486 longitude:-0.2012 lum_city:accra lum_region:aa postal_code: region:AA region_name:Greater Accra Region tz:Africa/Accra] ip:197.251.144.148]

Essa saída contém todas as informações extraídas do artigo do It’s FOSS. Na parte inferior da saída, você encontrará as informações de IP retornadas pelo Lumtest informando sobre a conexão atual usada pelo scraper. A execução de todas as três implementações deve fornecer uma resposta semelhante. Depois de testar todas as três, você estará pronto para começar a usar um proxy local.

Implementando scrapers com proxy local

Nesta seção, você aprenderá sobre as três implementações do scraper e as modificará para usar seu servidor proxy. Cada arquivo .go consiste na função main(), em que o aplicativo é iniciado, e na função ScrapeWithLibrary(), contendo as instruções para extração de dados.

Usando goquery com um proxy local

goquery é uma biblioteca para Go que fornece um conjunto de métodos e funcionalidades para fazer o parsing e manipular documentos HTML, semelhante à forma como o jQuery funciona para JavaScript. É particularmente útil para web scraping, pois permite percorrer, consultar e manipular a estrutura das páginas HTML. No entanto, essa biblioteca não lida com solicitações ou operações de rede de nenhum tipo, o que significa que você precisa obter e fornecer a página HTML para ela.

Se você navegar até o arquivo goquery.go , encontrará a implementação goquery do web scraper. Abra-o em seu IDE ou editor de texto favorito.

Dentro da função ScrapeWithGoquery() , você precisa modificar o transporte do cliente HTTP com o URL do seu servidor proxy HTTP, que é uma combinação do nome do host ou IP e a porta no formato http://HOST:PORT.

Certifique-se de importar o pacote net/url neste arquivo. Cole e substitua a definição do cliente HTTP pelo seguinte trecho:

...

func ScrapeWithGoquery() {
    // Define the URL of the proxy server
    proxyStr := "http://127.0.0.1:3128"

    // Parse the proxy URL
    proxyURL, err := url.Parse(proxyStr)
    if err != nil {
        fmt.Println("Error parsing proxy URL:", err)
        return
    }

    //Create an http.Transport that uses the proxy
    transport := &http.Transport{
        Proxy: http.ProxyURL(proxyURL),
    }

    // Create an HTTP client with the transport
    client := &http.Client{
        Transport: transport,
    }
    
... 

Esse trecho modifica o cliente HTTP com um transporte configurado para usar o servidor proxy local. Certifique-se de substituir o endereço IP pelo endereço IP do seu servidor proxy.

Agora, execute essa implementação usando o seguinte comando a partir do diretório do projeto:

go run ./goquery.go

Sua saída deve ser semelhante a esta:

$ go run ./goquery.go

Article 0: {"category":"Newsletter ✉️","excerpt":"Unwind your new year celebration with new open-source projects, and keep an eye on interesting distro updates.","title":"FOSS Weekly #24.02: Mixing AI With Linux, Vanilla OS 2, and More"}
Article 1: {"category":"Tutorial","excerpt":"Wondering how to use tiling windows on GNOME? Try the tiling assistant. Here's how it works.","title":"How to Use Tiling Assistant on GNOME Desktop?"}
Article 2: {"category":"Linux Commands","excerpt":"The free command in Linux helps you gain insights on system memory usage (RAM), and more. Here's how to make good use of it.","title":"Free Command Examples"}
Article 3: {"category":"Gaming 🎮","excerpt":"Here are the best tips to make your Linux gaming experience enjoyable.","title":"7 Tips and Tools to Improve Your Gaming Experience on Linux"}
Article 4: {"category":"Newsletter ✉️","excerpt":"The first edition of FOSS Weekly in the year 2024 is here. See, what's new in the new year.","title":"FOSS Weekly #24.01: Linux in 2024, GDM Customization, Distros You Missed Last Year"}
Article 5: {"category":"Tutorial","excerpt":"Wondering which init service your Linux system uses? Here's how to find it out.","title":"How to Check if Your Linux System Uses systemd"}
Article 6: {"category":"Ubuntu","excerpt":"Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.","title":"Installing Packages From External Repositories in Ubuntu [Explained]"}
Article 7: {"category":"Troubleshoot 🔬","excerpt":"Getting a warning that the boot partition has no space left? Here are some ways you can free up space on the boot partition in Ubuntu Linux.","title":"How to Free Up Space in /boot Partition on Ubuntu Linux?"}
Article 8: {"category":"Ubuntu","excerpt":"Wondering which Ubuntu version you're using? Here's how to check your Ubuntu version, desktop environment and other relevant system information.","title":"How to Check Ubuntu Version Details and Other System Information"}

Check Proxy IP map[asn:map[asnum:29614 org_name:VODAFONE GHANA AS INTERNATIONAL TRANSIT] country:GH geo:map[city:Accra latitude:5.5486 longitude:-0.2012 lum_city:accra lum_region:aa postal_code: region:AA region_name:Greater Accra Region tz:Africa/Accra] ip:197.251.144.148]

Usando Colly com um proxy local

Colly é uma estrutura de web scraping versátil e eficiente para Go, conhecida por sua API fácil de usar e integração perfeita com bibliotecas de parsing de HTML como goquery. No entanto, ao contrário da goquery, ele suporta e fornece API para lidar com vários comportamentos relacionados à rede, incluindo solicitações assíncronas para extração de dados em alta velocidade, cache local e limitação de taxa para garantir o uso eficiente e responsável dos recursos web, tratamento automático de cookies e sessões, agentes de usuário personalizáveis e tratamento abrangente de erros. Além disso, ele suporta o uso de proxy com alternância ou rotação de proxies e pode ser estendido para tarefas como extrair conteúdo gerado em JavaScript por meio da integração com navegadores headless.

Abra o arquivo colly.go em seu editor ou IDE e cole as seguintes linhas de código logo após inicializar um novo coletor dentro da função ScrapeWithColly():

...
    // Define the URL of the proxy server
    proxyStr := "http://127.0.0.1:3128"
    // SetProxy sets a proxy for the collector
    if err := c.SetProxy(proxyStr); err != nil {
        log.Fatalf("Error setting proxy configuration: %v", err)
    }
    
...

Esse trecho usa o método SetProxy() da Colly para definir o servidor proxy a ser usado por essa instância coletora para solicitações de rede.

Agora, execute essa implementação usando o seguinte comando a partir do diretório do projeto:

go run ./colly.go

Sua saída deve ser semelhante a esta:

$ go run ./colly.go

Article 0: {"category":"Newsletter ✉️","excerpt":"Unwind your new year celebration with new open-source projects, and keep an eye on interesting distro updates.","title":"FOSS Weekly #24.02: Mixing AI With Linux, Vanilla OS 2, and More"}
Article 1: {"category":"Tutorial","excerpt":"Wondering how to use tiling windows on GNOME? Try the tiling assistant. Here's how it works.","title":"How to Use Tiling Assistant on GNOME Desktop?"}
Article 2: {"category":"Linux Commands","excerpt":"The free command in Linux helps you gain insights on system memory usage (RAM), and more. Here's how to make good use of it.","title":"Free Command Examples"}
Article 3: {"category":"Gaming 🎮","excerpt":"Here are the best tips to make your Linux gaming experience enjoyable.","title":"7 Tips and Tools to Improve Your Gaming Experience on Linux"}
Article 4: {"category":"Newsletter ✉️","excerpt":"The first edition of FOSS Weekly in the year 2024 is here. See, what's new in the new year.","title":"FOSS Weekly #24.01: Linux in 2024, GDM Customization, Distros You Missed Last Year"}
Article 5: {"category":"Tutorial","excerpt":"Wondering which init service your Linux system uses? Here's how to find it out.","title":"How to Check if Your Linux System Uses systemd"}
Article 6: {"category":"Ubuntu","excerpt":"Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.","title":"Installing Packages From External Repositories in Ubuntu [Explained]"}
Article 7: {"category":"Troubleshoot 🔬","excerpt":"Getting a warning that the boot partition has no space left? Here are some ways you can free up space on the boot partition in Ubuntu Linux.","title":"How to Free Up Space in /boot Partition on Ubuntu Linux?"}
Article 8: {"category":"Ubuntu","excerpt":"Wondering which Ubuntu version you're using? Here's how to check your Ubuntu version, desktop environment and other relevant system information.","title":"How to Check Ubuntu Version Details and Other System Information"}

Check Proxy IP map[asn:map[asnum:29614 org_name:VODAFONE GHANA AS INTERNATIONAL TRANSIT] country:GH geo:map[city:Accra latitude:5.5486 longitude:-0.2012 lum_city:accra lum_region:aa postal_code: region:AA region_name:Greater Accra Region tz:Africa/Accra] ip:197.251.144.148]

Usando Selenium com um proxy local

Selenium é uma ferramenta usada principalmente para automatizar as interações do navegador web em testes de aplicativos web. Ele é capaz de realizar tarefas como clicar em botões, inserir texto e extrair dados de páginas web, o que o torna ideal para extrair conteúdo da web com interações automatizadas. A imitação de interações de usuários reais é possível por meio do WebDriver, que o Selenium usa para controlar os navegadores. Embora este exemplo use o Chrome, o Selenium também oferece suporte a outros navegadores, incluindo Firefox, Safari e Internet Explorer.

O serviço Selenium WebDriver permite que você forneça um proxy e outras configurações para influenciar o comportamento do navegador subjacente ao interagir com a web, assim como um navegador real. Programaticamente, isso pode ser configurado por meio da definição selelium.Capabilities{}.

Para usar o Selenium com um proxy local, edite o arquivo selenium.go dentro de ScrapeWithSelenium() e substitua a definição selelium.Capabilities{} pelo seguinte trecho:

...

    // Define proxy settings
    proxy := selenium.Proxy{
        Type: selenium.Manual,
        HTTP: "127.0.0.1:3128", // Replace with your proxy settings
        SSL:  "127.0.0.1:3128", // Replace with your proxy settings
    }

    // Configuring the WebDriver instance with the proxy
    caps := selenium.Capabilities{
        "browserName": "chrome",
        "proxy":       proxy,
    }
    
...

Esse trecho define os vários parâmetros de proxy do Selenium, que são usados para configurar os recursos do Selenium para o WebDriver. Na próxima execução, será usada a conexão proxy.

Agora, execute a implementação usando o seguinte comando a partir do diretório do projeto:

go run ./selenium.go

Sua saída deve ser semelhante a esta:

$ go run ./selenium.go

Article 0: {"category":"Newsletter ✉️","excerpt":"Unwind your new year celebration with new open-source projects, and keep an eye on interesting distro updates.","title":"FOSS Weekly #24.02: Mixing AI With Linux, Vanilla OS 2, and More"}
Article 1: {"category":"Tutorial","excerpt":"Wondering how to use tiling windows on GNOME? Try the tiling assistant. Here's how it works.","title":"How to Use Tiling Assistant on GNOME Desktop?"}
Article 2: {"category":"Linux Commands","excerpt":"The free command in Linux helps you gain insights on system memory usage (RAM), and more. Here's how to make good use of it.","title":"Free Command Examples"}
Article 3: {"category":"Gaming 🎮","excerpt":"Here are the best tips to make your Linux gaming experience enjoyable.","title":"7 Tips and Tools to Improve Your Gaming Experience on Linux"}
Article 4: {"category":"Newsletter ✉️","excerpt":"The first edition of FOSS Weekly in the year 2024 is here. See, what's new in the new year.","title":"FOSS Weekly #24.01: Linux in 2024, GDM Customization, Distros You Missed Last Year"}
Article 5: {"category":"Tutorial","excerpt":"Wondering which init service your Linux system uses? Here's how to find it out.","title":"How to Check if Your Linux System Uses systemd"}
Article 6: {"category":"Ubuntu","excerpt":"Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.","title":"Installing Packages From External Repositories in Ubuntu [Explained]"}
Article 7: {"category":"Troubleshoot 🔬","excerpt":"Getting a warning that the boot partition has no space left? Here are some ways you can free up space on the boot partition in Ubuntu Linux.","title":"How to Free Up Space in /boot Partition on Ubuntu Linux?"}
Article 8: {"category":"Ubuntu","excerpt":"Wondering which Ubuntu version you're using? Here's how to check your Ubuntu version, desktop environment and other relevant system information.","title":"How to Check Ubuntu Version Details and Other System Information"}

Check Proxy IP {"ip":"197.251.144.148","country":"GH","asn":{"asnum":29614,"org_name":"VODAFONE GHANA AS INTERNATIONAL TRANSIT"},"geo":{"city":"Accra","region":"AA","region_name":"Greater Accra Region","postal_code":"","latitude":5.5486,"longitude":-0.2012,"tz":"Africa/Accra","lum_city":"accra","lum_region":"aa"}}

Embora você mesmo possa manter um servidor proxy, existem limitações por vários fatores, incluindo a configuração de um novo servidor para diversas regiões e outros problemas de manutenção e segurança.

Servidores proxy da Bright Data

A Bright Data oferece uma infraestrutura global premiada de rede de proxies com um conjunto abrangente de servidores e serviços de proxy que podem ser usados para várias finalidades de extração de dados da web.

Com a extensa rede global de servidores proxy da Bright Data, você pode acessar e coletar dados facilmente de vários locais internacionais. A Bright Data também fornece uma variedade de tipos de proxy, incluindo mais de 350 milhões de proxies residenciaisde ISPsde datacentersmóveis exclusivos, cada um oferecendo benefícios únicos, como legitimidade, velocidade e confiabilidade, para tarefas específicas de extração de dados da web.

Além disso, o sistema de rotação de proxies da Bright Data garante alto anonimato e minimiza a detecção, tornando-o ideal para uma extração contínua e em grande escala dos dados da web.

Configurando um proxy residencial com a Bright Data

É fácil obter um proxy residencial com a Bright Data. Tudo o que você precisa fazer é se inscrever para um teste gratuito. Depois de se inscrever, você verá algo assim:

Painel da BD

Clique no botão Get started (começar) para Residential Proxies (proxies residenciais).

Será pedido que você preencha o seguinte formulário:

Configuração de proxies residenciais da BD

Vá em frente e forneça um nome para essa instância. Aqui, é my_go_demo_proxy. Você também precisa especificar o tipo de IP a ser provisionado: selecione Shared (se quiser usar proxies compartilhados). Em seguida, forneça o nível de geolocalização que você gostaria de imitar ao acessar o conteúdo da web. Por padrão, o nível é de País ou região. Você também precisa especificar se deseja que as páginas web solicitadas sejam armazenadas em cache. Por enquanto, desative o cache.

Depois de preencher essas informações, clique em Add (adicionar) para criar e fazer provisões para seu proxy residencial.

Em seguida, você precisa ativar seu proxy residencial. No entanto, como novo usuário, primeiro você deverá fornecer suas informações de cobrança. Depois de concluir essa etapa, navegue até seu painel e clique no proxy residencial que você acabou de criar:

Definir proxies em Go

Certifique-se de que a guia Access parameters (parâmetros de acesso) esteja selecionada.

Aqui, você encontrará os vários parâmetros necessários para usar o proxy residencial, como o host, a porta e as credenciais de autenticação. Você precisará dessas informações em breve.

Agora, é hora de integrar seu proxy residencial da Bright Data com as três implementações do scraper. Embora esse seja um processo semelhante ao que foi feito para o servidor local, você também incluirá a autenticação. Além disso, como você está interagindo com a web de forma programática, talvez não seja possível revisar e aceitar certificados SSL do servidor proxy, como você faria em um navegador com uma interface gráfica de usuário. Portanto, você precisa desativar a verificação do certificado SSL em seu cliente web de forma programática para que suas solicitações sejam ininterruptas.

Comece criando um diretório chamado brightdata no diretório do projeto e copie os três arquivos .go para o diretório brightdata . Sua estrutura de diretórios deve ser similar a esta:

.
├── brightdata
│   ├── colly.go
│   ├── goquery.go
│   └── selenium.go
├── chromedriver
├── colly.go
├── go.mod
├── goquery.go
├── go.sum
├── LICENSE
├── README.md
└── selenium.go

2 directories, 11 files

Posteriormente, você modificará os arquivos no diretório brightdata .

Usando goquery com um proxy residencial da Bright Data

Dentro da função ScrapeWithGoquery() , você precisa modificar a variável proxyStr para incluir as credenciais de autenticação no URL do proxy no formato http://USERNAME:PASSWORD@HOST:PORT. Substitua a definição atual pelo seguinte trecho:

...

func ScrapeWithGoquery() {
    // Define the proxy server with username and password
    proxyUsername := "username" //Your residential proxy username 
    proxyPassword := "your_password" //Your Residential Proxy password here
    proxyHost := "server_host" //Your Residential Proxy Host
    proxyPort := "server_port"  //Your Port here
    
    proxyStr := fmt.Sprintf("http://%s:%s@%s:%s", url.QueryEscape(proxyUsername), url.QueryEscape(proxyPassword), proxyHost, proxyPort)
    
    // Parse the proxy URL
...

Em seguida, você precisa modificar o transporte do cliente HTTP com uma configuração para ignorar a verificação do certificado SSL/TLS do servidor proxy. Comece adicionando o pacote crypto/tls às suas importações. Em seguida, substitua a definição http.Transport pelo trecho a seguir depois do parsing do URL do proxy:

...

func ScrapeWithGoquery() {
    
    // Parse the proxy URL
...

    //Create an http.Transport that uses the proxy
    transport := &http.Transport{
        Proxy: http.ProxyURL(proxyURL),
        TLSClientConfig: &tls.Config{
            InsecureSkipVerify: true, // Disable SSL certificate verification
        },
    }

    // Create an HTTP client with the transport
... 

Esse trecho modifica o cliente HTTP com um transporte configurado para usar o servidor proxy local. Certifique-se de substituir o endereço IP pelo do seu servidor proxy.

Em seguida, execute essa implementação usando o seguinte comando a partir do diretório do projeto:

go run brightdata/goquery.go 

Sua saída deve ser semelhante a esta:

$ go run brightdata/goquery.go 

Article 0: {"category":"Newsletter ✉️","excerpt":"Open source rival to Twitter, a hyped new terminal and a cool new Brave/Chrome feature among many other things.","title":"FOSS Weekly #24.07: Fedora Atomic Distro, Android FOSS Apps, Mozilla Monitor Plus and More"}
Article 1: {"category":"Explain","excerpt":"Intel makes things confusing, I guess. Let's try making the processor naming changes simpler.","title":"Intel Processor Naming Changes: All You Need to Know"}
Article 2: {"category":"Linux Commands","excerpt":"The Cut command lets you extract a part of the file to print without affecting the original file. Learn more here.","title":"Cut Command Examples"}
Article 3: {"category":"Raspberry Pi","excerpt":"A UART attached to your Raspberry Pi can help you troubleshoot issues with your Raspberry Pi. Here's what you need to know.","title":"Using a USB Serial Adapter (UART) to Help Debug Your Raspberry Pi"}
Article 4: {"category":"Newsletter ✉️","excerpt":"Damn Small Linux resumes development after 16 years.","title":"FOSS Weekly #24.06: Ollama AI, Zorin OS Upgrade, Damn Small Linux, Sudo on Windows and More"}
Article 5: {"category":"Tutorial","excerpt":"Zorin OS now provides a way to upgrade to a newer major version. Here's how to do that.","title":"How to upgrade to Zorin OS 17"}
Article 6: {"category":"Ubuntu","excerpt":"Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.","title":"Installing Packages From External Repositories in Ubuntu [Explained]"}
Article 7: {"category":"Troubleshoot 🔬","excerpt":"Getting a warning that the boot partition has no space left? Here are some ways you can free up space on the boot partition in Ubuntu Linux.","title":"How to Free Up Space in /boot Partition on Ubuntu Linux?"}
Article 8: {"category":"Ubuntu","excerpt":"Wondering which Ubuntu version you’re using? Here’s how to check your Ubuntu version, desktop environment and other relevant system information.","title":"How to Check Ubuntu Version Details and Other System Information"}

Check Proxy IP map[asn:map[asnum:7922 org_name:COMCAST-7922] country:US geo:map[city:Crown Point latitude:41.4253 longitude:-87.3565 lum_city:crownpoint lum_region:in postal_code:46307 region:IN region_name:Indiana tz:America/Chicago] ip:73.36.77.244]

Você notará que, embora esteja extraindo dos mesmos artigos, a verificação do IP do proxy retornou informações diferentes, o que indica que você está navegando de um local ou país diferente.

Usando Colly com um proxy residencial da Bright Data

Embora a Colly não forneça um método para desativar programaticamente a verificação SSL/TLS, ela oferece um em que você pode fornecer seu próprio transporte  para ser usado por seu cliente HTTP.

Com o arquivo colly.go aberto em seu editor ou IDE, cole as seguintes linhas de código depois de inicializar um novo coletor dentro da função ScrapeWithColly() (não se esqueça de adicionar as importações net/url e net/http):

...
func ScrapeWithColly() {
    ...
    
    //Create an http.Transport that uses the proxy
    transport := &http.Transport{
        TLSClientConfig: &tls.Config{
            InsecureSkipVerify: true, // Disable SSL certificate verification
        },
    }
    
    // Set the collector instance to use the configured transport
    c.WithTransport(transport)
    
    
...

Esse trecho define um transporte HTTP com a verificação do SSL desativada e usa o método WithTransport() da Colly para definir o transporte do coletor para solicitações de rede.

Modifique a variável proxyStr para conter as credenciais do proxy residencial (assim como você fez com a goquery). Substitua a linha proxyStr pelo seguinte trecho:

...

    // Define the proxy server with username and password
    proxyUsername := "username" //Your residential proxy username 
    proxyPassword := "your_password" //Your Residential Proxy password here
    proxyHost := "server_host" //Your Residential Proxy Host
    proxyPort := "server_port"  //Your Port here

    proxyStr := fmt.Sprintf("http://%s:%s@%s:%s", url.QueryEscape(proxyUsername), url.QueryEscape(proxyPassword), proxyHost, proxyPort)

...

Não se esqueça de substituir os valores da string pelos da página Access parameters do seu proxy residencial.

Depois, execute essa implementação usando o seguinte comando a partir do diretório do projeto:

go run brightdata/colly.go
go run brightdata/colly.go 
…

Check Proxy IP map[asn:map[asnum:2856 org_name:British Telecommunications PLC] country:GB geo:map[city:Turriff latitude:57.5324 longitude:-2.3883 lum_city:turriff lum_region:sct postal_code:AB53 region:SCT region_name:Scotland tz:Europe/London] ip:86.180.236.254]

Na parte “Check Proxy IP” (verificar IP do proxy) da saída, você notará a mudança de país mesmo que as mesmas credenciais estejam sendo usadas.

Usando Selenium com um proxy residencial da Bright Data

Ao trabalhar com Selenium, você precisa modificar a definição selenium.Proxy{} para usar a string de URL do proxy com as credenciais. Substitua a atual definição do proxy pela seguinte:

...

    // Define the proxy server with username and password
    proxyUsername := "username"      //Your residential proxy username
    proxyPassword := "your_password" //Your Residential Proxy password here
    proxyHost := "server_host"       //Your Residential Proxy Host
    proxyPort := "server_port"       //Your Port here

    proxyStr := fmt.Sprintf("http://%s:%s@%s:%s", url.QueryEscape(proxyUsername), url.QueryEscape(proxyPassword), proxyHost, proxyPort)

    // Define proxy settings
    proxy := selenium.Proxy{
        Type: selenium.Manual,
        HTTP: proxyStr,
        SSL:  proxyStr,
    }
    
...

Não se esqueça de importar o pacote net/url .

Esse trecho define os vários parâmetros do proxy e é mesclado para criar o URL do proxy usado na configuração do proxy.

Agora, o Chrome WebDriver precisa ser configurado com opções para desativar a verificação do SSL ao usar o proxy residencial, assim como foi feito nas implementações anteriores. Para fazer isso, modifique os argumentos da definição chromeCaps para incluir a opção --ignore-certificate-errors desta forma:

... 
    caps.AddChrome(chrome.Capabilities{Args: []string{
        "--headless=new", // Start browser without UI as a background process
        "--ignore-certificate-errors", // // Disable SSL certificate verification
    }})
...

Por padrão, o Selenium não oferece suporte à configuração de proxy autenticado. No entanto, você pode contornar isso usando um pequeno pacote para criar uma extensão do Chrome para uma conexão proxy autenticada.

Primeiro, adicione o pacote ao seu projeto usando este comando go get :

go get https://github.com/rexfordnyrk/proxyauth

Em seguida, importe o pacote para o arquivo brightdata/selenium.go adicionando a linha "github.com/rexfordnyrk/proxyauth" no bloco de importação no topo do arquivo.

Em seguida, você precisa criar a extensão do Chome usando o método BuildExtension() do pacote proxyauth e passá-la junto com suas credenciais do proxy residencial da Bright Data. Para fazer isso, cole o seguinte trecho de código após a definição chromeCaps , mas antes da linha caps.AddChrome(chromeCaps):

…
    //Building proxy auth extension using BrightData Proxy credentials
    extension, err := proxyauth.BuildExtention(proxyHost, proxyPort, proxyUsername, proxyPassword)
    if err != nil {
        log.Fatal("BuildProxyExtension Error:", err)
    }

    //including the extension to allow proxy authentication in chrome
    if err := chromeCaps.AddExtension(extension); err != nil {
        log.Fatal("Error adding Extension:", err)
    }

…

Esse trecho cria uma extensão do Chrome e a adiciona ao Chrome WebDriver para permitir solicitações web autenticadas por meio das credenciais de proxy fornecidas.

Você pode executar essa implementação usando o seguinte comando a partir do diretório do projeto:

go run brightdata/selenium.go

Sua saída deve ser semelhante a esta:

$ go run brightdata/selenium.go 

Article 0: {"categoryText":"Newsletter ✉️","excerpt":"Check out the promising new features in Ubuntu 24.04 LTS and a new immutable distro.","title":"FOSS Weekly #24.08: Ubuntu 24.04 Features, Arkane Linux, grep, Fedora COSMIC and More"}
…
Article 8: {"categoryText":"Ubuntu","excerpt":"Wondering which Ubuntu version you’re using? Here’s how to check your Ubuntu version, desktop environment and other relevant system information.","title":"How to Check Ubuntu Version Details and Other System Information"}

Check Proxy IP {"ip":"176.45.169.166","country":"SA","asn":{"asnum":25019,"org_name":"Saudi Telecom Company JSC"},"geo":{"city":"Riyadh","region":"01","region_name":"Riyadh Region","postal_code":"","latitude":24.6869,"longitude":46.7224,"tz":"Asia/Riyadh","lum_city":"riyadh","lum_region":"01"}}

Mais uma vez, se você observar as informações de IP na parte inferior da saída, notará que um país diferente também é usado para enviar a solicitação. Este é o sistema de rotação de proxies da Bright Data em ação.

Como você pode ver, usar a Bright Data em seu aplicativo Go é fácil. Primeiro, você cria o proxy residencial na plataforma da Bright Data e obtém suas credenciais. Depois, você usa essas informações para modificar seu código para usar o proxy na web.

Conclusão

Os servidores proxy web são um componente essencial para interações personalizadas do usuário na internet. Neste artigo, você aprendeu tudo sobre servidores proxy e como configurar um servidor proxy auto-hospedado usando o Squid. Você também aprendeu como integrar um servidor proxy local em seus aplicativos Go, neste caso um web scraper.

Se tiver interesse em trabalhar com servidores proxy, considere usar a Bright Data. Sua rede de proxies de última geração pode ajudar você a coletar dados rapidamente sem se preocupar com qualquer infraestrutura ou manutenção adicional.