Прокси-серверы Go — руководство по настройке прокси-серверов для работы с Go

Из этой статьи вы узнаете, как настроить прокси-сервер для веб-парсинга в Go.
2 мин. чтения
Setting Proxy in GO

Все взаимодействия с Интернетом требуют использования IP-адреса. Веб-сайты используют этот IP-адрес для идентификации пользователя или пользователей, определения вашего местоположения и других метаданных, таких как интернет-провайдер, часовой пояс или тип устройства. Веб-серверы используют эту информацию для адаптации или ограничения доступа к контенту или ресурсам. Это означает, что при веб-парсинге сайты могут блокировать запросы, исходящие с вашего IP-адреса, если сочтут, что структура трафика или поведение являются необычными, похожими на ботов или вредоносными. К счастью, тут могут помочь прокси-серверы.

Прокси-сервер — это сервер-посредник, выполняющий функцию шлюза между пользователем и Интернетом. Он получает запросы от пользователей, перенаправляет их на веб-ресурсы, а затем возвращает полученные данные пользователям. Прокси-сервер позволяет скрытно просматривать веб-страницы и выполнять парсинг, скрывая ваш реальный IP-адрес, что повышает безопасность, конфиденциальность и анонимность.

Прокси-серверы также помогают обходить запреты на использование IP-адресов, изменяя ваш IP-адрес и создавая впечатление, что запросы поступают от разных пользователей. Прокси-серверы, расположенные в разных регионах, позволяют получать доступ к геоспецифичному контенту, например фильмам или новостям, в обход геоблокировки.

Из этой статьи вы узнаете, как настроить прокси-сервер длявеб-парсинга в Go. Вы также узнаете о прокси-серверах Bright Data и о том, как они могут помочь вам упростить этот процесс.

Настройка прокси-сервера

Из этого руководства вы узнаете, как модифицировать приложение для веб-парсинга, написанное на Go, для взаимодействия с веб-сайтом It’s FOSS через локальный прокси-сервер или прокси-сервер на собственном хостинге. Для целей этого руководства предполагается, что среда разработки Go уже настроена.

Для начала вам необходимо настроить прокси-сервер с помощью Squid, программного обеспечения (ПО) для прокси-серверов с открытым исходным кодом. Если вы знакомы с другим ПО прокси-серверов, вы также сможете использовать и это ПО. В данной статье используется Squid на боксе Fedora 39 Linux. В большинстве Linux-дистрибутивов Squid включен в репозитории по умолчанию. Вы также можете ознакомиться с документацией, чтобы загрузить необходимые пакеты для вашей операционной системы.

В терминале выполните следующую команду для установки Squid:

  dnf install squid -yn

После завершения запустите службу, выполнив следующую команду:

  sudo systemctl enable u002du002dnow squidn

Проверьте состояние службы с помощью этой команды:

  sudo systemctl status squidn

Ваш результат должен выглядеть следующим образом:

Прокси-серверы Go

Это означает, что служба активна и запущена. По умолчанию Squid запускает и прослушивает запросы через порт 3128. Используйте следующую команду curl для проверки передачи данных через прокси-сервер:

  curl u002du002dproxy 127.0.0.1:3128 u0022http://lumtest.com/myip.jsonu0022n

Полученный вами ответ должен выглядеть следующим образом:

  curl u002du002dproxy 127.0.0.1:3128 u0022http://lumtest.com/myip.jsonu0022n{u0022ipu0022:u0022196.43.196.126u0022,u0022countryu0022:u0022GHu0022,u0022asnu0022:{u0022asnumu0022:327695,u0022org_nameu0022:u0022AITIu0022},u0022geou0022:{u0022cityu0022:u0022u0022,u0022regionu0022:u0022u0022,u0022region_nameu0022:u0022u0022,u0022postal_codeu0022:u0022u0022,u0022latitudeu0022:8.1,u0022longitudeu0022:-1.2,u0022tzu0022:u0022Africa/Accrau0022}}nn

Метаданные должны включать ваш публичный IP-адрес, страну и организацию, которой этот адрес принадлежит. Это также подтверждает, что вы успешно установили рабочий прокси-сервер.

Настройте демо-парсер

Чтобы вам было проще следить за ситуацией, воспользуйтесь простым приложением Go для веб-парсинга, доступным вот в этом репозитории GitHub. В парсере представлены заголовки, выдержки и категории последних публикаций в It’s FOSS, популярном блоге, в котором обсуждаются программные продукты с открытым исходным кодом. Затем парсер посещает Lumtest , чтобы получить информацию об IP-адресе, используемом HTTP-клиентом парсера для взаимодействия с Интернетом. Та же логика реализована с использованием трех разных пакетов Go: Colly, goquery и Selenium. Из следующего раздела вы узнаете, как модифицировать каждую реализацию для использования прокси-сервера.

Начните с клонирования репозитория, выполнив следующую команду в своем предпочтительном терминале или оболочке:

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

Этот репозиторий состоит из двух веток: ветки main , в которой находится готовый код, и ветки basic , в которой содержится исходный код, который вы собираетесь изменить. Используйте следующую команду, чтобы извлечь рабочую копию в ветку basic :

  $ git checkout basicn

Эта ветка содержит три файла .go для реализации парсера с каждой библиотекой без настроенного прокси-сервера. Она также содержит исполняемый файл chromedriver, необходимый для реализации парсера в Selenium:

  .n├── chromedrivern├── colly.gon├── go.modn├── goquery.gon├── go.sumn├── LICENSEn├── README.mdn└── selenium.gonn1 directory, 8 filesn

Любой из них можно запустить по отдельности, используя команду go run с определенным именем файла. Например, следующая команда запускает парсер с помощью Colly:

  go run ./colly.go n

Ваш результат должен выглядеть следующим образом:

  $ go run ./colly.gonnArticle 0: {u0022categoryu0022:u0022Newsletter ✉️u0022,u0022excerptu0022:u0022Unwind your new year celebration with new open-source projects, and keep an eye on interesting distro updates.u0022,u0022titleu0022:u0022FOSS Weekly #24.02: Mixing AI With Linux, Vanilla OS 2, and Moreu0022}nArticle 1: {u0022categoryu0022:u0022Tutorialu0022,u0022excerptu0022:u0022Wondering how to use tiling windows on GNOME? Try the tiling assistant. Here's how it works.u0022,u0022titleu0022:u0022How to Use Tiling Assistant on GNOME Desktop?u0022}nArticle 2: {u0022categoryu0022:u0022Linux Commandsu0022,u0022excerptu0022:u0022The free command in Linux helps you gain insights on system memory usage (RAM), and more. Here's how to make good use of it.u0022,u0022titleu0022:u0022Free Command Examplesu0022}nArticle 3: {u0022categoryu0022:u0022Gaming 🎮u0022,u0022excerptu0022:u0022Here are the best tips to make your Linux gaming experience enjoyable.u0022,u0022titleu0022:u00227 Tips and Tools to Improve Your Gaming Experience on Linuxu0022}nArticle 4: {u0022categoryu0022:u0022Newsletter ✉️u0022,u0022excerptu0022:u0022The first edition of FOSS Weekly in the year 2024 is here. See, what's new in the new year.u0022,u0022titleu0022:u0022FOSS Weekly #24.01: Linux in 2024, GDM Customization, Distros You Missed Last Yearu0022}nArticle 5: {u0022categoryu0022:u0022Tutorialu0022,u0022excerptu0022:u0022Wondering which init service your Linux system uses? Here's how to find it out.u0022,u0022titleu0022:u0022How to Check if Your Linux System Uses systemdu0022}nArticle 6: {u0022categoryu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.u0022,u0022titleu0022:u0022Installing Packages From External Repositories in Ubuntu [Explained]u0022}nArticle 7: {u0022categoryu0022:u0022Troubleshoot 🔬u0022,u0022excerptu0022:u0022Getting 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.u0022,u0022titleu0022:u0022How to Free Up Space in /boot Partition on Ubuntu Linux?u0022}nArticle 8: {u0022categoryu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Wondering which Ubuntu version you're using? Here's how to check your Ubuntu version, desktop environment and other relevant system information.u0022,u0022titleu0022:u0022How to Check Ubuntu Version Details and Other System Informationu0022}nnCheck 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]n

Эти выходные данные содержат всю информацию из It’s FOSS, полученную с помощью парсинга. В нижней части выходных данных вы найдете информацию об IP-адресе, полученную от Lumtest, в которой указано текущее соединение, используемое парсером. Выполнение всех трех реализаций должно привести к получению аналогичных ответов. После того как вы протестировали все три реализации, вы можете приступить к парсингу с помощью локального прокси-сервера.

Реализация парсеров с локальным прокси-сервером

Из этого раздела вы узнаете обо всех трех реализациях парсера и измените их для использования прокси-сервера. Каждый файл .go состоит из функции main(), с которой запускается приложение, и функции ScrapeWithLibrary(), содержащей инструкции по парсингу.

Использование goquery с локальным прокси-сервером

goquery — это библиотека для Go, которая предоставляет набор методов и функций для анализа HTML-документов и управления ими, аналогично тому, как jQuery работает с JavaScript. Это особенно полезно при веб-парсинге, поскольку позволяет просматривать, запрашивать и изменять структуру HTML-страниц. Однако эта библиотека не обрабатывает сетевые запросы или операции любого рода, поэтому вам необходимо получить и предоставить ей HTML-страницу.

Перейдя к файлу goquery.go , вы найдете реализацию веб-парсера goquery. Откройте его в своей предпочтительной интегрированной среде разработки (IDE) или текстовом редакторе.

В функции ScrapeWithGoquery() необходимо изменить транспорт HTTP-клиента, указав URL-адрес вашего прокси-сервера HTTP, который представляет собой комбинацию имени хоста или IP-адреса и порта в формате http://HOST:PORT.

Обязательно импортируйте пакет net/url в этот файл. Вставьте и замените определение HTTP-клиента следующим фрагментом:

  ...nnfunc ScrapeWithGoquery() {n    // Define the URL of the proxy servern    proxyStr := u0022http://127.0.0.1:3128u0022nn    // Parse the proxy URLn    proxyURL, err := url.Parse(proxyStr)n    if err != nil {n        fmt.Println(u0022Error parsing proxy URL:u0022, err)n        returnn    }nn    //Create an http.Transport that uses the proxyn    transport := u0026http.Transport{n        Proxy: http.ProxyURL(proxyURL),n    }nn    // Create an HTTP client with the transportn    client := u0026http.Client{n        Transport: transport,n    }n    n... n

Этот фрагмент кода модифицирует HTTP-клиент, используя транспорт, настроенный для использования локального прокси-сервера. Обязательно замените IP-адрес IP-адресом прокси-сервера.

Теперь запустите эту реализацию с помощью следующей команды из каталога проекта:

  go run ./goquery.gon

Ваш результат должен выглядеть следующим образом:

  $ go run ./goquery.gonnArticle 0: {u0022categoryu0022:u0022Newsletter ✉️u0022,u0022excerptu0022:u0022Unwind your new year celebration with new open-source projects, and keep an eye on interesting distro updates.u0022,u0022titleu0022:u0022FOSS Weekly #24.02: Mixing AI With Linux, Vanilla OS 2, and Moreu0022}nArticle 1: {u0022categoryu0022:u0022Tutorialu0022,u0022excerptu0022:u0022Wondering how to use tiling windows on GNOME? Try the tiling assistant. Here's how it works.u0022,u0022titleu0022:u0022How to Use Tiling Assistant on GNOME Desktop?u0022}nArticle 2: {u0022categoryu0022:u0022Linux Commandsu0022,u0022excerptu0022:u0022The free command in Linux helps you gain insights on system memory usage (RAM), and more. Here's how to make good use of it.u0022,u0022titleu0022:u0022Free Command Examplesu0022}nArticle 3: {u0022categoryu0022:u0022Gaming 🎮u0022,u0022excerptu0022:u0022Here are the best tips to make your Linux gaming experience enjoyable.u0022,u0022titleu0022:u00227 Tips and Tools to Improve Your Gaming Experience on Linuxu0022}nArticle 4: {u0022categoryu0022:u0022Newsletter ✉️u0022,u0022excerptu0022:u0022The first edition of FOSS Weekly in the year 2024 is here. See, what's new in the new year.u0022,u0022titleu0022:u0022FOSS Weekly #24.01: Linux in 2024, GDM Customization, Distros You Missed Last Yearu0022}nArticle 5: {u0022categoryu0022:u0022Tutorialu0022,u0022excerptu0022:u0022Wondering which init service your Linux system uses? Here's how to find it out.u0022,u0022titleu0022:u0022How to Check if Your Linux System Uses systemdu0022}nArticle 6: {u0022categoryu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.u0022,u0022titleu0022:u0022Installing Packages From External Repositories in Ubuntu [Explained]u0022}nArticle 7: {u0022categoryu0022:u0022Troubleshoot 🔬u0022,u0022excerptu0022:u0022Getting 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.u0022,u0022titleu0022:u0022How to Free Up Space in /boot Partition on Ubuntu Linux?u0022}nArticle 8: {u0022categoryu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Wondering which Ubuntu version you're using? Here's how to check your Ubuntu version, desktop environment and other relevant system information.u0022,u0022titleu0022:u0022How to Check Ubuntu Version Details and Other System Informationu0022}nnCheck 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]n

Использование Colly с локальным прокси-сервером

Colly — это универсальный и эффективный фреймворк веб-парсинга для Go, известный своим удобным API и безупречной интеграцией с библиотеками синтаксического анализа HTML, такими как goquery. Однако, в отличие от goquery, он поддерживает и предоставляет API для обработки различных сетевых моделей поведения, включая асинхронные запросы на высокоскоростной парсинг, локальное кэширование и ограничение скорости для обеспечения эффективного и ответственного использования веб-ресурсов, автоматическую обработку файлов cookie и сеансов, настраиваемые пользовательские агенты и комплексную обработку ошибок. Кроме того, он поддерживает использование прокси-сервера с переключением или ротацией прокси-серверов и может быть расширен для выполнения таких задач, как парсинг контента, созданного на JavaScript, путем интеграции с headless-браузерами.

Откройте файл colly.go в редакторе или IDE и вставьте следующие строки кода сразу после инициализации нового сборщика в функции scrapeWithColly():

  ...n    // Define the URL of the proxy servern    proxyStr := u0022http://127.0.0.1:3128u0022n    // SetProxy sets a proxy for the collectorn    if err := c.SetProxy(proxyStr); err != nil {n        log.Fatalf(u0022Error setting proxy configuration: %vu0022, err)n    }n    n...n

В этом фрагменте метод Colly SetProxy() применяется для определения прокси-сервера, который будет использоваться этим инстансом сборщика сетевых запросов.

Теперь запустите эту реализацию с помощью следующей команды из каталога проекта:

  go run ./colly.gon

Ваш результат должен выглядеть следующим образом:

  $ go run ./colly.gonnArticle 0: {u0022categoryu0022:u0022Newsletter ✉️u0022,u0022excerptu0022:u0022Unwind your new year celebration with new open-source projects, and keep an eye on interesting distro updates.u0022,u0022titleu0022:u0022FOSS Weekly #24.02: Mixing AI With Linux, Vanilla OS 2, and Moreu0022}nArticle 1: {u0022categoryu0022:u0022Tutorialu0022,u0022excerptu0022:u0022Wondering how to use tiling windows on GNOME? Try the tiling assistant. Here's how it works.u0022,u0022titleu0022:u0022How to Use Tiling Assistant on GNOME Desktop?u0022}nArticle 2: {u0022categoryu0022:u0022Linux Commandsu0022,u0022excerptu0022:u0022The free command in Linux helps you gain insights on system memory usage (RAM), and more. Here's how to make good use of it.u0022,u0022titleu0022:u0022Free Command Examplesu0022}nArticle 3: {u0022categoryu0022:u0022Gaming 🎮u0022,u0022excerptu0022:u0022Here are the best tips to make your Linux gaming experience enjoyable.u0022,u0022titleu0022:u00227 Tips and Tools to Improve Your Gaming Experience on Linuxu0022}nArticle 4: {u0022categoryu0022:u0022Newsletter ✉️u0022,u0022excerptu0022:u0022The first edition of FOSS Weekly in the year 2024 is here. See, what's new in the new year.u0022,u0022titleu0022:u0022FOSS Weekly #24.01: Linux in 2024, GDM Customization, Distros You Missed Last Yearu0022}nArticle 5: {u0022categoryu0022:u0022Tutorialu0022,u0022excerptu0022:u0022Wondering which init service your Linux system uses? Here's how to find it out.u0022,u0022titleu0022:u0022How to Check if Your Linux System Uses systemdu0022}nArticle 6: {u0022categoryu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.u0022,u0022titleu0022:u0022Installing Packages From External Repositories in Ubuntu [Explained]u0022}nArticle 7: {u0022categoryu0022:u0022Troubleshoot 🔬u0022,u0022excerptu0022:u0022Getting 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.u0022,u0022titleu0022:u0022How to Free Up Space in /boot Partition on Ubuntu Linux?u0022}nArticle 8: {u0022categoryu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Wondering which Ubuntu version you're using? Here's how to check your Ubuntu version, desktop environment and other relevant system information.u0022,u0022titleu0022:u0022How to Check Ubuntu Version Details and Other System Informationu0022}nnCheck 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]nn

Использование Selenium с локальным прокси-сервером

Selenium — это инструмент, который в основном используется для автоматизации взаимодействия с веб-браузерами при тестировании веб-приложений. Он способен выполнять такие задачи, как нажатие кнопок, ввод текста и извлечение данных с веб-страниц, что делает его идеальным средством для веб-парсинга с помощью автоматических взаимодействий. Имитация реальных пользовательских взаимодействий стала возможной благодаря WebDriver, который Selenium использует для управления браузерами. Хотя в этом примере применяется Chrome, Selenium также поддерживает другие браузеры, включая Firefox, Safari и Internet Explorer.

Служба Selenium WebDriver позволяет вам предоставлять прокси-сервер и другие конфигурации, чтобы повлиять на поведение базового браузера при взаимодействии с Интернетом, как и в случае с реальным браузером. Программно это можно настроить с помощью определения selelium.Capabilities{}.

Чтобы использовать Selenium с локальным прокси-сервером, отредактируйте файл selenium.go в ScrapeWithSelenium() и замените определение selelium.Capabilities{} следующим фрагментом:

  ...nn    // Define proxy settingsn    proxy := selenium.Proxy{n        Type: selenium.Manual,n        HTTP: u0022127.0.0.1:3128u0022, // Replace with your proxy settingsn        SSL:  u0022127.0.0.1:3128u0022, // Replace with your proxy settingsn    }nn    // Configuring the WebDriver instance with the proxyn    caps := selenium.Capabilities{n        u0022browserNameu0022: u0022chromeu0022,n        u0022proxyu0022:       proxy,n    }n    n...n

Этот фрагмент определяет различные параметры прокси-сервера для Selenium, которые используются для настройки возможностей Selenium для WebDriver. При следующем выполнении будет использовано прокси-соединение.

Теперь запустите реализацию с помощью следующей команды из каталога проекта:

  go run ./selenium.gon

Ваш результат должен выглядеть следующим образом:

  $ go run ./selenium.gonnArticle 0: {u0022categoryu0022:u0022Newsletter ✉️u0022,u0022excerptu0022:u0022Unwind your new year celebration with new open-source projects, and keep an eye on interesting distro updates.u0022,u0022titleu0022:u0022FOSS Weekly #24.02: Mixing AI With Linux, Vanilla OS 2, and Moreu0022}nArticle 1: {u0022categoryu0022:u0022Tutorialu0022,u0022excerptu0022:u0022Wondering how to use tiling windows on GNOME? Try the tiling assistant. Here's how it works.u0022,u0022titleu0022:u0022How to Use Tiling Assistant on GNOME Desktop?u0022}nArticle 2: {u0022categoryu0022:u0022Linux Commandsu0022,u0022excerptu0022:u0022The free command in Linux helps you gain insights on system memory usage (RAM), and more. Here's how to make good use of it.u0022,u0022titleu0022:u0022Free Command Examplesu0022}nArticle 3: {u0022categoryu0022:u0022Gaming 🎮u0022,u0022excerptu0022:u0022Here are the best tips to make your Linux gaming experience enjoyable.u0022,u0022titleu0022:u00227 Tips and Tools to Improve Your Gaming Experience on Linuxu0022}nArticle 4: {u0022categoryu0022:u0022Newsletter ✉️u0022,u0022excerptu0022:u0022The first edition of FOSS Weekly in the year 2024 is here. See, what's new in the new year.u0022,u0022titleu0022:u0022FOSS Weekly #24.01: Linux in 2024, GDM Customization, Distros You Missed Last Yearu0022}nArticle 5: {u0022categoryu0022:u0022Tutorialu0022,u0022excerptu0022:u0022Wondering which init service your Linux system uses? Here's how to find it out.u0022,u0022titleu0022:u0022How to Check if Your Linux System Uses systemdu0022}nArticle 6: {u0022categoryu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.u0022,u0022titleu0022:u0022Installing Packages From External Repositories in Ubuntu [Explained]u0022}nArticle 7: {u0022categoryu0022:u0022Troubleshoot 🔬u0022,u0022excerptu0022:u0022Getting 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.u0022,u0022titleu0022:u0022How to Free Up Space in /boot Partition on Ubuntu Linux?u0022}nArticle 8: {u0022categoryu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Wondering which Ubuntu version you're using? Here's how to check your Ubuntu version, desktop environment and other relevant system information.u0022,u0022titleu0022:u0022How to Check Ubuntu Version Details and Other System Informationu0022}nnCheck Proxy IP {u0022ipu0022:u0022197.251.144.148u0022,u0022countryu0022:u0022GHu0022,u0022asnu0022:{u0022asnumu0022:29614,u0022org_nameu0022:u0022VODAFONE GHANA AS INTERNATIONAL TRANSITu0022},u0022geou0022:{u0022cityu0022:u0022Accrau0022,u0022regionu0022:u0022AAu0022,u0022region_nameu0022:u0022Greater Accra Regionu0022,u0022postal_codeu0022:u0022u0022,u0022latitudeu0022:5.5486,u0022longitudeu0022:-0.2012,u0022tzu0022:u0022Africa/Accrau0022,u0022lum_cityu0022:u0022accrau0022,u0022lum_regionu0022:u0022aau0022}}nn

Хотя вы можете обслуживать прокси-сервер самостоятельно, ваши возможности ограничены различными факторами, включая необходимость настройки новых серверов для новых различных регионов, а также другие проблемы с обслуживанием и безопасностью.

Прокси-серверы Bright Data

Bright Data предлагает отмеченную наградами глобальную инфраструктуру прокси-сети с полным набором прокси-серверов и служб, которые можно использовать для различных целей сбора веб-данных.

Благодаря обширной глобальной сети прокси-серверов Bright Data вы можете легко получать доступ к данным и собирать их в разных странах. Bright Data также предоставляет ряд типов прокси-серверов, включая более 350 миллионов уникальных резидентных прокси-серверовпрокси-серверов интернет-провайжеровпрокси-серверов центров обработки данныхи мобильных прокси-серверов, каждый из которых предлагает уникальные преимущества, такие как легитимность, скорость и надежность, для решения конкретных задач сбора веб-данных.

Кроме того, система ротации прокси-серверов Bright Data обеспечивает высокую анонимность и минимизирует обнаружение, что делает ее идеальной для непрерывного и крупномасштабного сбора веб-данных.

Настройка резидентного прокси-сервера с помощью Bright Data

Получить резидентный прокси-сервер с помощью Bright Data очень просто. Все, что вам нужно сделать, — это зарегистрироваться для получения бесплатной пробной версии. После регистрации вы увидите что-то вроде этого:

Панель управления BD

Нажмите кнопку «Начать работу» в разделе «Резидентные прокси-серверы».

Вам будет предложено заполнить следующую форму:

Настрока резидентных прокси-серверов BD

Теперь укажите имя этого инстанса. Здесь это my_go_demo_proxy. Также необходимо указать тип предоставляемого IP-адреса: выберите «Общий» (Shared) (если вы хотите использовать общие прокси-серверы). Затем укажите уровень геолокации, который вы хотите имитировать при доступе к веб-контенту. По умолчанию это уровень «Страна» или «Зона». Вам также необходимо указать, хотите ли вы кэшировать запрашиваемые веб-страницы. Пока отключите кеширование.

После заполнения этой информации нажмите «Добавить», чтобы создать и подготовить резидентный прокси-сервер.

Затем вам необходимо активировать его. Однако, как нового пользователя, сначала вас попросят ввести платежные реквизиты. Выполнив этот шаг, перейдите на панель управления и нажмите на только что созданный резидентный прокси-сервер:

настройка прокси-серверов в go

Убедитесь, что выбрана вкладка «Параметры доступа».

Здесь вы найдете различные параметры, необходимые для использования резидентного прокси-сервера, такие как хост, порт и учетные данные для аутентификации. Эта информация вас скоро понадобится.

Теперь пора интегрировать ваш резидентный прокси-сервер Bright Data со всеми тремя реализациями парсера. Хотя этот процесс аналогичен процессу для локального сервера, здесь вам также придется включить аутентификацию. Кроме того, поскольку вы взаимодействуете с Интернетом программным путем, просматривать и принимать SSL-сертификаты от прокси-сервера таким же способом, как в браузере с графическим пользовательским интерфейсом, может оказаться невозможным. Поэтому вам необходимо программно отключить проверку сертификата SSL в веб-клиенте, чтобы ваши запросы выполнялись без проблем.

Начните с создания каталога brightdata в каталоге проекта и скопируйте три файла .go в каталог brightdata. Ваша структура каталогов должна выглядеть следующим образом:

  .n├── brightdatan│   ├── colly.gon│   ├── goquery.gon│   └── selenium.gon├── chromedrivern├── colly.gon├── go.modn├── goquery.gon├── go.sumn├── LICENSEn├── README.mdn└── selenium.gonn2 directories, 11 filesnn

В дальнейшем вы будете изменять файлы в каталоге brightdata.

Использование goquery с резидентным прокси-сервером Bright Data

В функции ScrapeWithGoquery() необходимо изменить переменную proxyStr, чтобы включить учетные данные для аутентификации в URL-адрес прокси-сервера в формате http://USERNAME:PASSWORD@HOST:PORT. Замените текущее определение следующим фрагментом:

  ...nnfunc ScrapeWithGoquery() {n    // Define the proxy server with username and passwordn    proxyUsername := u0022usernameu0022 //Your residential proxy username n    proxyPassword := u0022your_passwordu0022 //Your Residential Proxy password heren    proxyHost := u0022server_hostu0022 //Your Residential Proxy Hostn    proxyPort := u0022server_portu0022  //Your Port heren    n    proxyStr := fmt.Sprintf(u0022http://%s:%s@%s:%su0022, url.QueryEscape(proxyUsername), url.QueryEscape(proxyPassword), proxyHost, proxyPort)n    n    // Parse the proxy URLn...n

Затем необходимо изменить транспорт HTTP-клиента, указав конфигурацию, позволяющую игнорировать проверку сертификата SSL/TLS прокси-сервера. Начните с добавления пакета crypto/tls к импорту. Затем замените определение http.Transport следующим фрагментом после анализа URL-адреса прокси-сервера:

  ...nnfunc ScrapeWithGoquery() {n    n    // Parse the proxy URLn...nn    //Create an http.Transport that uses the proxyn    transport := u0026http.Transport{n        Proxy: http.ProxyURL(proxyURL),n        TLSClientConfig: u0026tls.Config{n            InsecureSkipVerify: true, // Disable SSL certificate verificationn        },n    }nn    // Create an HTTP client with the transportn... n

Этот фрагмент кода модифицирует HTTP-клиент, используя транспорт, настроенный для использования локального прокси-сервера. Обязательно замените IP-адрес на IP-адрес вашего прокси-сервера.

Затем запустите эту реализацию, используя следующую команду из каталога проекта:

  go run brightdata/goquery.go n

Ваши выходные данные должны выглядеть следующим образом:

  $ go run brightdata/goquery.go nnArticle 0: {u0022categoryu0022:u0022Newsletter ✉️u0022,u0022excerptu0022:u0022Open source rival to Twitter, a hyped new terminal and a cool new Brave/Chrome feature among many other things.u0022,u0022titleu0022:u0022FOSS Weekly #24.07: Fedora Atomic Distro, Android FOSS Apps, Mozilla Monitor Plus and Moreu0022}nArticle 1: {u0022categoryu0022:u0022Explainu0022,u0022excerptu0022:u0022Intel makes things confusing, I guess. Let's try making the processor naming changes simpler.u0022,u0022titleu0022:u0022Intel Processor Naming Changes: All You Need to Knowu0022}nArticle 2: {u0022categoryu0022:u0022Linux Commandsu0022,u0022excerptu0022:u0022The Cut command lets you extract a part of the file to print without affecting the original file. Learn more here.u0022,u0022titleu0022:u0022Cut Command Examplesu0022}nArticle 3: {u0022categoryu0022:u0022Raspberry Piu0022,u0022excerptu0022:u0022A UART attached to your Raspberry Pi can help you troubleshoot issues with your Raspberry Pi. Here's what you need to know.u0022,u0022titleu0022:u0022Using a USB Serial Adapter (UART) to Help Debug Your Raspberry Piu0022}nArticle 4: {u0022categoryu0022:u0022Newsletter ✉️u0022,u0022excerptu0022:u0022Damn Small Linux resumes development after 16 years.u0022,u0022titleu0022:u0022FOSS Weekly #24.06: Ollama AI, Zorin OS Upgrade, Damn Small Linux, Sudo on Windows and Moreu0022}nArticle 5: {u0022categoryu0022:u0022Tutorialu0022,u0022excerptu0022:u0022Zorin OS now provides a way to upgrade to a newer major version. Here's how to do that.u0022,u0022titleu0022:u0022How to upgrade to Zorin OS 17u0022}nArticle 6: {u0022categoryu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.u0022,u0022titleu0022:u0022Installing Packages From External Repositories in Ubuntu [Explained]u0022}nArticle 7: {u0022categoryu0022:u0022Troubleshoot 🔬u0022,u0022excerptu0022:u0022Getting 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.u0022,u0022titleu0022:u0022How to Free Up Space in /boot Partition on Ubuntu Linux?u0022}nArticle 8: {u0022categoryu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Wondering which Ubuntu version you’re using? Here’s how to check your Ubuntu version, desktop environment and other relevant system information.u0022,u0022titleu0022:u0022How to Check Ubuntu Version Details and Other System Informationu0022}nnCheck 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]n

Вы заметите, что, несмотря на то, что вы просматриваете одни и те же статьи, проверка IP-адреса прокси-сервера выдала другую информацию, указывающую на переход из другого места или страны.

Использование Colly с резидентным прокси-сервером Bright Data

Несмотря на то, что пакет Colly не предлагает способа программного отключения проверки SSL/TLS, он дает вам возможность предоставить собственный транспорт HTTP-клиенту.

Открыв файл colly.go в своем редакторе или IDE, вставьте следующие строки кода после инициализации нового сборщика внутри функции ScrapeWithColly() (не забудьте добавить импорт net/url и net/http):

  ...nfunc ScrapeWithColly() {n    ...n    n    //Create an http.Transport that uses the proxyn    transport := u0026http.Transport{n        TLSClientConfig: u0026tls.Config{n            InsecureSkipVerify: true, // Disable SSL certificate verificationn        },n    }n    n    // Set the collector instance to use the configured transportn    c.WithTransport(transport)n    n    n...n

Этот фрагмент определяет HTTP-транспорт с отключенной проверкой SSL и использует метод WithTransport() в Colly для настройки транспорта сборщика сетевых запросов.

Измените переменную proxyStr так, чтобы она содержала учетные данные резидентного прокси-сервера (как и в случае с goquery). Замените строку proxyStr следующим фрагментом:

  ...nn    // Define the proxy server with username and passwordn    proxyUsername := u0022usernameu0022 //Your residential proxy username n    proxyPassword := u0022your_passwordu0022 //Your Residential Proxy password heren    proxyHost := u0022server_hostu0022 //Your Residential Proxy Hostn    proxyPort := u0022server_portu0022  //Your Port herenn    proxyStr := fmt.Sprintf(u0022http://%s:%s@%s:%su0022, url.QueryEscape(proxyUsername), url.QueryEscape(proxyPassword), proxyHost, proxyPort)nn...n

Не забудьте заменить строковые значения значениями со страницы «Параметры доступа» вашего резидентного прокси-сервера.

Потом запустите эту реализацию, используя следующую команду из каталога проекта:

  go run brightdata/colly.gon
  go run brightdata/colly.go n…nnCheck 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]nn

В части выходных данных «Проверьте IP-адрес прокси-сервера» вы заметите смену страны, несмотря на то, что используются те же учетные данные.

Использование Selenium с резидентным прокси-сервером Bright Data

При работе с Selenium необходимо изменить определение selenium.Proxy{}, чтобы использовать строку URL-адреса прокси-сервера с учетными данными. Замените текущее определение прокси-сервера следующим:

  ...nn    // Define the proxy server with username and passwordn    proxyUsername := u0022usernameu0022      //Your residential proxy usernamen    proxyPassword := u0022your_passwordu0022 //Your Residential Proxy password heren    proxyHost := u0022server_hostu0022       //Your Residential Proxy Hostn    proxyPort := u0022server_portu0022       //Your Port herenn    proxyStr := fmt.Sprintf(u0022http://%s:%s@%s:%su0022, url.QueryEscape(proxyUsername), url.QueryEscape(proxyPassword), proxyHost, proxyPort)nn    // Define proxy settingsn    proxy := selenium.Proxy{n        Type: selenium.Manual,n        HTTP: proxyStr,n        SSL:  proxyStr,n    }n    n...n

Не забудьте импортировать пакет net/url.

Этот фрагмент определяет различные параметры прокси-сервера и объединяется для создания URL-адреса прокси-сервера, используемого в конфигурации прокси-сервера.

Теперь необходимо настроить Chrome WebDriver с опциями отключения проверки SSL при использовании резидентного прокси-сервера, как это было сделано в предыдущих реализациях. Для этого измените аргументы определения chromeCaps, включив в них опцию --ignore-certificate-errors следующим образом:

  ... n    caps.AddChrome(chrome.Capabilities{Args: []string{n        u0022u002du002dheadless=newu0022, // Start browser without UI as a background processn        u0022u002du002dignore-certificate-errorsu0022, // // Disable SSL certificate verificationn    }})n...n

По умолчанию Selenium не поддерживает аутентифицированную конфигурацию прокси-сервера. Однако вы можете обойти эту проблему, используя небольшой пакет для создания расширения Chrome для аутентифицированного прокси-соединения.

Сначала добавьте пакет в свой проект, используя команду go get:

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

Затем импортируйте пакет в файл brightdata/selenium.go, добавив строку «github.com/rexfordnyrk/proxyauth» в блок импорта в верхней части файла.

Затем вам необходимо создать расширение Chome с помощью метода BuildExtension() из пакета proxyauth и передать его вместе со своими учетными данными резидентного прокси-сервера Bright Data. Для этого вставьте следующий фрагмент кода после определения chromeCaps, но перед строкой caps.AddChrome(chromeCaps):

  …n    //Building proxy auth extension using BrightData Proxy credentialsn    extension, err := proxyauth.BuildExtention(proxyHost, proxyPort, proxyUsername, proxyPassword)n    if err != nil {n        log.Fatal(u0022BuildProxyExtension Error:u0022, err)n    }nn    //including the extension to allow proxy authentication in chromen    if err := chromeCaps.AddExtension(extension); err != nil {n        log.Fatal(u0022Error adding Extension:u0022, err)n    }nn…n

Этот фрагмент кода создает расширение Chrome и добавляет его в Chrome WebDriver, чтобы разрешить аутентифицированные веб-запросы с помощью предоставленных учетных данных прокси-сервера.

Эту реализацию можно запустить с помощью следующей команды из каталога проекта:

  go run brightdata/selenium.gon

Ваш результат должен выглядеть следующим образом:

  $ go run brightdata/selenium.go nnArticle 0: {u0022categoryTextu0022:u0022Newsletter ✉️u0022,u0022excerptu0022:u0022Check out the promising new features in Ubuntu 24.04 LTS and a new immutable distro.u0022,u0022titleu0022:u0022FOSS Weekly #24.08: Ubuntu 24.04 Features, Arkane Linux, grep, Fedora COSMIC and Moreu0022}n…nArticle 8: {u0022categoryTextu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Wondering which Ubuntu version you’re using? Here’s how to check your Ubuntu version, desktop environment and other relevant system information.u0022,u0022titleu0022:u0022How to Check Ubuntu Version Details and Other System Informationu0022}nnCheck Proxy IP {u0022ipu0022:u0022176.45.169.166u0022,u0022countryu0022:u0022SAu0022,u0022asnu0022:{u0022asnumu0022:25019,u0022org_nameu0022:u0022Saudi Telecom Company JSCu0022},u0022geou0022:{u0022cityu0022:u0022Riyadhu0022,u0022regionu0022:u002201u0022,u0022region_nameu0022:u0022Riyadh Regionu0022,u0022postal_codeu0022:u0022u0022,u0022latitudeu0022:24.6869,u0022longitudeu0022:46.7224,u0022tzu0022:u0022Asia/Riyadhu0022,u0022lum_cityu0022:u0022riyadhu0022,u0022lum_regionu0022:u002201u0022}}nn

Опять же, если вы посмотрите на информацию об IP-адресе в нижней части выходных данных, вы заметите, что для отправки запроса также используется другая страна. Это показывает, что ротация прокси-серверов Bright Data работает.

Как видите, использовать Bright Data в приложении Go очень просто. Сначала вы создаете резидентный прокси-сервер на платформе Bright Data и получаете свои учетные данные. Затем вы меняете код с учетом этой информации, чтобы использовать прокси-сервер для взаимодействия с Интернетом.

Заключение

Веб-прокси-серверы являются важным компонентом персонализированного взаимодействия пользователей в Интернете. Из этой статьи вы узнали все о прокси-серверах и о том, как настроить собственный прокси-сервер с помощью Squid. Вы также узнали, как интегрировать локальный прокси-сервер в приложения Go, в данном случае в веб-парсер.

Если вас интересует работа с прокси-серверами, вам следует рассмотреть возможность использования Bright Data. Эта современная прокси-сеть позволяет быстро собирать данные, не беспокоясь о дополнительной инфраструктуре или обслуживании.