Go-Proxy-Server – Leitfaden zur Einrichtung von Proxy-Servern mit Go

In diesem Artikel erfahren Sie, wie Sie einen Proxy-Server für das Web-Scraping mit Go einrichten.
26 min read
Setting Proxy in GO

Jede Interaktion mit dem Internet erfordert die Verwendung einer IP-Adresse. Anhand dieser IP-Adresse identifizieren Websites den oder die Benutzer und ermitteln deren Standort bzw. andere Metadaten, wie z.B. Ihren ISP, die Zeitzone oder den Gerätetyp. Webserver verwenden diese Daten, um Inhalte oder Ressourcen anzupassen oder einzuschränken. Das bedeutet, dass Websites Anfragen, die von Ihrer IP-Adresse ausgehen, blockieren können, wenn sie das Datenverkehrsmuster oder das Verhalten für ungewöhnlich, Bot-ähnlich oder bösartig halten. Glücklicherweise bieten Proxy-Server hier Abhilfe.

Ein Proxy-Server ist ein Vermittlungsserver, der als Gateway zwischen einem Nutzer und dem Internet fungiert. Der Server empfängt die Anfragen von Nutzern, leitet sie an die Webressourcen weiter und sendet dann die abgerufenen Daten an die Nutzer zurück. Ein Proxy-Server erlaubt es Ihnen, diskret zu surfen und zu scrapen, indem er Ihre wahre IP-Adresse verschleiert und somit mehr Sicherheit, Datenschutz und Anonymität gewährleistet.

Proxy-Server können zudem  IP-Sperren umgehen , da sie Ihre IP-Adresse ändern und dadurch den Eindruck erzeugen, als würden die Anfragen von anderen Nutzern stammen. Über Proxy-Server, die sich in verschiedenen Regionen befinden, können Sie auf geospezifische Inhalte wie Filme oder Nachrichten zugreifen und so geografische Sperren umgehen.

In diesem Artikel erfahren Sie, wie Sie einen Proxy-Server für das Web-Scraping in Go einrichten. Des Weiteren lernen Sie die Proxy-Server von Bright Data kennen und wie Sie diesen Prozess vereinfachen können.

Einrichtung eines Proxy-Servers

In dieser Anleitung lernen Sie, wie Sie eine in Go geschriebene Web-Scraper-Anwendung so anpassen, dass sie über einen lokalen oder selbst gehosteten Proxy-Server mit der Website von It’s FOSS interagiert. Diese Anleitung setzt eine bereits eingerichtete Entwicklungsumgebung für Go voraus.

Zunächst müssen Sie Ihren Proxyserver mit Squid, einer Open Source Proxy-Server-Software, einrichten. Falls Sie mit einer anderen Proxy-Server-Software vertraut sind, können Sie auch diese verwenden. Im folgenden Artikel wird Squid auf einem Fedora 39 Linux-System verwendet. Bei den meisten Linux-Distributionen gehört Squid zu den Standard-Repositories. Alternativ können Sie auch die Dokumentation einsehen, um die erforderlichen Pakete für Ihr Betriebssystem herunterzuladen

Führen Sie von Ihrem Terminal aus den folgenden Befehl aus, um Squid zu installieren:

dnf install squid -y

Nach Abschluss des Vorgangs starten Sie diesen Dienst durch Ausführen des folgenden Befehls:

sudo systemctl enable --now squid

Überprüfen Sie den Status des Dienstes mit diesem Befehl:

sudo systemctl status squid

Ihre Ausgabe sollte wie folgt aussehen:

Go-Proxy-Server

Dies zeigt an, dass der Dienst aktiv ist und ausgeführt wird. Standardmäßig wird Squid auf Port 3128 ausgeführt und lauscht dort auf Anfragen. Verwenden Sie den folgenden curl-Befehl, um die Kommunikation über den Proxy-Server zu prüfen:

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

Ihre Antwort sollte wie folgt aussehen:

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"}}

Die Metadaten sollten Ihre öffentliche IP-Adresse sowie das Land und die Organisation, der diese Adresse zugewiesen ist, enthalten. Außerdem bestätigt dies, dass Sie einen funktionstüchtigen Proxy-Server ordnungsgemäß installiert haben.

Einrichtung des Demo-Scraper

Um Ihnen das Ganze zu vereinfachen, ist in diesem GitHub-Repository eine einfache Go-Web-Scraper-Anwendung verfügbar. Der Scraper erfasst den Titel, den Auszug und die Kategorien der neuesten Blog-Einträge auf It’s FOSS, einem beliebten Blog zum Thema Open-Source-Softwareprodukte. Der Scraper ruft dann Lumtest auf, um Informationen über die IP-Adresse zu sammeln, die der HTTP-Client des Scrapers für die Interaktion mit dem Web verwendet. Dieselbe Logik wird mit drei verschiedenen Go-Paketen implementiert: Colly, goquery und Selenium. Im nächsten Abschnitt wird erläutert, wie Sie die einzelnen Implementierungen für die Verwendung eines Proxy-Servers anpassen können.

Führen Sie hierzu den folgenden Befehl in Ihrem bevorzugten Terminal/Shell aus, um das Repository zu klonen:

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

Dieses Repository besteht aus zwei Zweigen: dem Hauptzweig , der den fertigen Code enthält, sowie  dem Basiszweig , der den ursprünglichen Code enthält, welchen Sie ändern werden. Verwenden Sie folgenden Befehl,  um zum Basiszweig zu  gelangen:

$ git checkout basic

Dieser Zweig enthält drei .go -Dateien für jede Bibliotheks-Implementierung des Scrapers ohne konfigurierten Proxy. Außerdem enthält er eine ausführbare Chromedriver-Datei, die von der Selenium-Implementierung des Scrapers benötigt wird:

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

1 directory, 8 files

Jede dieser Dateien kann einzeln ausgeführt werden, indem Sie den Befehl go run mit dem jeweiligen Dateinamen verwenden. Beispielsweise führt der folgende Befehl den Scraper mit Colly aus:

go run ./colly.go 

Ihre Ausgabe sollte wie folgt aussehen:

$ 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]

Diese Ausgabe enthält alle gescrapten Artikelinformationen von It’s FOSS. Am unteren Ende der Ausgabe finden Sie die von Lumtest zurückgegebenen IP-Informationen, die Aufschluss über die aktuell vom Scraper verwendete Verbindung geben. Bei Ausführung aller drei Implementierungen sollten Sie eine ähnliche Antwort erhalten. Sobald Sie alle drei getestet haben, können Sie das Scrapen mit einem lokalen Proxy beginnen.

Implementierung von Scrapern mit lokalem Proxy

Dieser Abschnitt befasst sich mit allen drei Implementierungen des Scrapers und deren Anpassung für die Verwendung Ihres Proxy-Servers Jede .go -Datei besteht aus der main() -Funktion, mit der die Anwendung gestartet wird, und der ScrapeWithLibrary() -Funktion, welche die Anweisungen für das Scraping enthält.

Verwendung von goquery mit lokalem Proxy

goquery  ist eine Bibliothek für Go, die eine Reihe von Verfahren und Funktionalitäten zum Parsen und Manipulieren von HTML-Dokumenten bietet und dabei der Funktionsweise von jQuery für JavaScript ähnelt. Besonders nützlich ist sie beim Web-Scraping, wo man die Struktur von HTML-Seiten durchlaufen, abfragen und manipulieren kann. Diese Bibliothek verarbeitet jedoch keine Netzwerkanfragen oder Operationen jeglicher Art, d. h. Sie müssen ihr die HTML-Seite beschaffen und bereitstellen.

Rufen Sie die Datei goquery.go auf. Dort finden Sie die goquery-Implementierung des Web-Scrapers. Öffnen Sie diese in Ihrer bevorzugten IDE oder Ihrem Texteditor.

Passen Sie innerhalb der Funktion ScrapeWithGoquery() den Transport des HTTP-Clients mit der URL Ihres HTTP-Proxy-Servers an, die sich aus einer Kombination von Hostname oder IP und Port im Format http://HOST:PORTzusammensetzt.

Importieren Sie unbedingt das Paket net/url in diese Datei. Fügen Sie die Definition des HTTP-Clients ein und ersetzen Sie diese durch das folgende Snippet (Codeausschnitt):

...

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,
    }
    
... 

Dieses Snippet ändert den HTTP-Client mit einem Transport, der zur Verwendung des lokalen Proxy-Servers konfiguriert ist. Stellen Sie sicher, die IP-Adresse durch die IP-Adresse Ihres Proxy-Servers zu ersetzen.

Führen Sie diese Implementierung nun mit folgendem Befehl aus dem Projektverzeichnis aus:

go run ./goquery.go

Ihre Ausgabe sollte wie folgt aussehen:

$ 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]

Verwendung von Colly mit lokalem Proxy

Colly ist ein vielseitiges und effizientes Web-Scraping-Framework für Go, welches für seine benutzerfreundliche API und nahtlose Integration mit HTML-Parsing-Bibliotheken wie goquery berühmt ist. Anders als goqueryunterstützt und bietet es jedoch eine API zur Verwaltung verschiedener netzwerkbezogener Verhaltensweisen, einschließlich asynchroner Anfragen für High-Speed-Scraping, lokales Caching und Ratenbegrenzung, um eine effiziente und verantwortungsvolle Nutzung von Webressourcen zu gewährleisten. Außerdem unterstützt es den automatischen Einsatz von Cookies und Sitzungen, anpassbare Benutzeragenten und eine umfassende Fehlerbehandlung. Ferner wird die Nutzung von Proxys mit Proxy-Wechsel oder -Rotation unterstützt und kann für Aufgaben wie das Scraping von JavaScript-generierten Inhalten durch die Integration mit Headless-Browsern erweitert werden.

Öffnen Sie die Datei colly.go in Ihrem Editor oder Ihrer IDE auf und fügen Sie die folgenden Codezeilen direkt nach der Initialisierung eines neuen Collectors in die Funktion ScrapeWithColly()  ein:

...
    // 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)
    }
    
...

Dieses Snippet bestimmt mit der Colly-Methode SetProxy() den Proxy-Server, der von diesem Collector für Netzwerkanfragen verwendet werden soll.

Führen Sie diese Implementierung nun mit folgendem Befehl aus dem Projektverzeichnis aus:

go run ./colly.go

Ihre Ausgabe sollte wie folgt aussehen:

$ 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]

Verwendung von Selenium mit lokalem Proxy

Selenium ist ein in erster Linie für die Automatisierung von Webbrowser-Interaktionen beim Testen von Webanwendungen verwendetes Instrument. Mit Selenium lassen sich Aufgaben wie das Anklicken von Schaltflächen, die Eingabe von Texten und die Extraktion von Daten aus Webseiten ausführen, wodurch es sich ideal für das Scrapen von Webinhalten mit automatisierten Interaktionen anbietet. Die Nachahmung echter Benutzerinteraktionen wird durch den WebDriver möglich, den Selenium zur Steuerung von Browsern verwendet. In diesem Beispiel wird Chrome verwendet, doch Selenium unterstützt auch andere Browser, einschließlich Firefox, Safari und Internet Explorer.

Über den WebDriver-Dienst von Selenium kann das Verhalten des zugrundeliegenden Browsers bei der Interaktion mit dem Web durch einen Proxy und andere Konfigurationen beeinflusst werden, ähnlich wie bei einem echten Browser. Dies kann programmgesteuert über die Definition selelium.Capabilities{} konfiguriert werden.

Um Selenium mit einem lokalen Proxy zu verwenden, bearbeiten Sie die Datei selenium.go innerhalb von ScrapeWithSelenium() und ersetzen Sie die Definition selelium.Capabilities{} durch folgendes Snippet:

...

    // 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,
    }
    
...

Dieses Snippet bestimmt die verschiedenen Proxy-Parameter für Selenium, die zur Konfiguration der Fähigkeiten von Selenium für den WebDriver dienen. Bei der nächsten Ausführung wird die Proxy-Verbindung verwendet.

Führen Sie nun die Implementierung mit folgendem Befehl aus dem Projektverzeichnis aus:

go run ./selenium.go

Ihre Ausgabe sollte wie folgt aussehen:

$ 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"}}

Zwar können Sie einen Proxy-Server selbst verwalten, doch sind Sie dabei durch verschiedene Faktoren wie die Einrichtung eines neuen Servers für verschiedene Regionen sowie durch andere Wartungs- und Sicherheitsfragen eingeschränkt.

Bright Data-Proxy-Server

Bright Data bietet eine preisgekrönte globale Proxy-Netzwerkinfrastruktur mit einem umfassenden Angebot an Proxy-Servern und -diensten, die für unterschiedliche Zwecke der Webdatenerfassung genutzt werden können.

Dank des ausgedehnten globalen Netzwerks von Bright Data-Proxy-Servern können Sie problemlos von verschiedenen Standorten weltweit auf Daten zugreifen und diese sammeln. Bright Data bietet überdies eine Vielzahl von Proxy-Typen an, zu denen mehr als 350 Millionen einzigartige Proxys für PrivatanwenderISPsRechenzentren und mobile Endgeräte zählen, wobei jeder einzelne Proxy einzigartige Vorteile wie Legitimität, Geschwindigkeit und Zuverlässigkeit für bestimmte Aufgaben beim Sammeln von Webdaten mit sich bringt.

Das Bright Data Proxy-Rotationssystem gewährleistet zusätzlich ein hohes Maß an Anonymität und reduziert deren Entdeckung auf ein Minimum, wodurch es sich ideal für eine fortlaufende und groß angelegte Erfassung von Webdaten eignet.

Einrichtung eines Residential-Proxys mit Bright Data

Die Einrichtung eines Residential-Proxys mit Bright Data ist denkbar einfach. Hierzu müssen Sie sich lediglich für eine kostenlose Testversion anmelden . Nach der Anmeldung wird Ihnen etwas wie Folgendes angezeigt:

BD-Dashboard

Klicken Sie auf die Schaltfläche „ Erste Schritte “ für  Residential-Proxys.

Daraufhin werden Sie aufgefordert, folgendes Formular auszufüllen:

BD Res-Proxys einrichten

Geben Sie dieser Instanz nun einen Namen. Hier lautet der Name my_go_demo_proxy. Sie müssen auch den bereitzustellenden IP-Typ angeben: Wählen Sie „ Freigegeben“ (wenn Sie freigegebene Proxys verwenden möchten). Geben Sie anschließend die Geolokalisierung auf der Ebene an, die Sie beim Zugriff auf die Webinhalte nachahmen möchten. Standardmäßig ist dies auf Landesebene oder Zone eingestellt. Weiterhin müssen Sie angeben, ob die von Ihnen angeforderten Webseiten zwischengespeichert werden sollen. Schalten Sie das Caching vorerst aus.

Nach Eingabe dieser Informationen klicken Sie auf Hinzufügen , um Ihren privaten Proxy zu erstellen und einzurichten.

Als Nächstes aktivieren Sie Ihren Residential-Proxy. Allerdings werden Sie als neuer Benutzer zunächst aufgefordert, Ihre Rechnungsdaten anzugeben. Sobald Sie diesen Schritt abgeschlossen haben, öffnen Sie Ihr Dashboard und klicken Sie auf den soeben erstellten Residential-Proxy:

Proxys in Go einrichten

Achten Sie darauf, dass die Registerkarte „ Zugangsparameter “ ausgewählt ist.

Auf dieser Registerkarte finden Sie die verschiedenen Parameter, die Sie für die Nutzung des Proxys für Privatanwender benötigen, z. B. Host, Port und Authentifizierungsdaten. Sie werden diese Daten bald benötigen.

Kommen wir nun zur Integration Ihres Bright Data Residential-Proxys mit den drei Implementierungen des Scrapers. Dieser Prozess ähnelt dem, der für den lokalen Server durchgeführt wurde, allerdings wird hier zusätzlich die Authentifizierung einbezogen. Da Sie programmgesteuert mit dem Internet interagieren, ist es unter Umständen nicht möglich, SSL-Zertifikate vom Proxy-Server zu überprüfen und zu akzeptieren, wie Sie es in einem Browser mit grafischer Benutzeroberfläche tun würden. Um Ihre Anfragen ohne Unterbrechung bearbeiten zu können, müssen Sie folglich die Überprüfung von SSL-Zertifikaten auf Ihrem Web-Client programmgesteuert deaktivieren.

Beginnen Sie mit dem Anlegen eines Verzeichnisses namens brightdata im Projektverzeichnis und kopieren Sie die drei .go -Dateien in das brightdata -Verzeichnis. Ihre Verzeichnisstruktur sollte wie folgt aussehen:

.
├── 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

Im weiteren Verlauf werden Sie die Dateien im Verzeichnis brightdata ändern.

Verwendung von goquery mit einem Bright Data Residential-Proxy

Ändern Sie innerhalb der Funktion ScrapeWithGoquery() die Variable proxyStr , um die Authentifizierungsdaten in der Proxy-URL im Format http://USERNAME:PASSWORD@HOST:PORT einzubinden. Ersetzen Sie die aktuelle Definition durch folgendes Snippet:

...

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

Nun müssen Sie den Transport des HTTP-Clients mit einer Einstellung ändern, die das Überprüfen des SSL/TLS-Zertifikats des Proxy-Servers ignoriert. Ergänzen Sie dazu zuerst das Paket crypto/tls zu Ihren Importen. Ersetzen Sie dann die http.Transport -Definition durch das folgende Snippet, sobald Sie die Proxy-URL geparst haben:

...

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

Dieses Snippet ändert den HTTP-Client mit einem zur Verwendung des lokalen Proxy-Servers konfigurierten Transport. Achten Sie darauf, Ihre IP-Adresse durch die Ihres Proxy-Servers zu ersetzen.

Führen Sie diese Implementierung anschließend mit folgendem Befehl aus dem Projektverzeichnis aus:

go run brightdata/goquery.go 

Ihre Ausgabe sollte wie folgt aussehen:

$ 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]

Obwohl Sie dieselben Einträge abrufen, haben Sie bei der Überprüfung der Proxy-IP-Adresse andere Informationen erhalten, was darauf hindeutet, dass Sie von einem anderen Ort oder Land aus operieren.

Verwendung von Colly mit einem Bright Data Residential-Proxy

Colly unterstützt zwar keine Methode zur programmgesteuerten Deaktivierung der SSL/TLS-Verifizierung, bietet aber eine Lösung, mit der Sie Ihren eigenen Transport für den HTTP-Client bereitstellen können

Öffnen Sie die Datei colly.go in Ihrem Editor oder Ihrer IDE und fügen Sie die folgenden Codezeilen nach Initialisierung eines neuen Collectors in die Funktion ScrapeWithColly() ein (denken Sie daran, die Importe net/url und net/http hinzuzufügen):

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

Dieses Snippet definiert einen HTTP-Transport mit deaktivierter SSL-Verifizierung und verwendet die Methode Colly WithTransport() , um den Transport des Collectors für Netzwerkanfragen festzulegen.

Ändern Sie die Variable proxyStr  entsprechend, sodass sie die Zugangsdaten für den Residential-Proxy beinhaltet (genau wie bei goquery). Ersetzen Sie die Zeile ProxyStr durch das folgende Snippet:

...

    // 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)

...

Achten Sie darauf, die String-Werte durch die Werte auf der Seite Zugangsparameter Ihres Residential-Proxys zu ersetzen.

Führen Sie diese Implementierung anschließend mit folgendem Befehl aus dem Projektverzeichnis aus:

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]

Im Ausgabebereich „Proxy-IP prüfen“ werden Sie feststellen, dass sich das Land geändert hat, obwohl die gleichen Zugangsdaten verwendet werden.

Verwendung von Selenium mit einem Bright Data Residential-Proxy

Bei der Verwendung von Selenium müssen Sie die selenium.Proxy{} -Definition ändern, um den Proxy-URL-String mit den Zugangsdaten zu verwenden. Ersetzen Sie die aktuelle Proxy-Definition durch folgende:

...

    // 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,
    }
    
...

Vergessen Sie nicht, das Paket net/url zu importieren.

Dieses Snippet bestimmt die verschiedenen Proxy-Parameter und wird zur Erstellung der Proxy-URL zusammengefügt, die in der Proxy-Konfiguration verwendet wird.

Im Chrome WebDriver müssen nun die Optionen zur Deaktivierung der SSL-Verifizierung bei der Verwendung des Residential-Proxys konfiguriert werden, wie dies auch bei den vorherigen Implementierungen bereits der Fall war. Ändern Sie hierfür die Argumente der chromeCaps -Definition und fügen Sie die Option --ignore-certificate-errors wie folgt ein:.

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

Selenium unterstützt standardmäßig keine authentifizierte Proxy-Konfiguration. Mit einem kleinen Paket zur Erstellung einer Chrome-Erweiterung für eine authentifizierte Proxy-Verbindung können Sie dies jedoch umgehen.

Fügen Sie das Paket mit diesem go get -Befehl zunächst Ihrem Projekt hinzu:

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

Importieren Sie anschließend das Paket in die Datei brightdata/selenium.go , indem Sie die Zeile „ github.com/rexfordnyrk/proxyauth “ in den Importblock am oberen Rand der Datei einfügen.

Im nächsten Schritt müssen Sie die Chome-Erweiterung mit der Methode BuildExtension() aus dem proxyauth-Paket erstellen und diese zusammen mit den Zugangsdaten des Bright Data Residential-Proxys übermitteln. Fügen Sie dazu den folgenden Codeausschnitt nach der chromeCaps -Definition, aber vor der Zeile caps.AddChrome(chromeCaps) ein:

…
    //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)
    }

…

Dieses Snippet erzeugt eine Chrome-Erweiterung und fügt sie zum Chrome WebDriver hinzu, um authentifizierte Webanfragen über die angegebenen Proxy-Zugangsdaten zuzulassen.

Diese Implementierung können Sie mit folgendem Befehl aus dem Projektverzeichnis ausführen:

go run brightdata/selenium.go

Ihre Ausgabe sollte wie folgt aussehen:

$ 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"}}

Wenn Sie sich die IP-Informationen unten in der Ausgabe ansehen, werden Sie feststellen, dass ein anderes Land zur Übermittlung der Anfrage verwendet wird. Dies ist das Bright Data-Proxy-Rotationssystem in Aktion.

Wie Sie sehen können, ist die Verwendung von Bright Data in Ihrer Go-Anwendung recht einfach. Als Erstes erstellen Sie den Residential-Proxy auf der Bright Data-Plattform zum Abruf Ihrer Zugangsdaten. Anhand dieser Informationen ändern Sie als nächstes Ihren Code, um den Proxy für die Nutzung des Webs zu verwenden.

Fazit

Web-Proxy-Server sind eine wesentliche Komponente für bedarfsgerechte Benutzerinteraktionen im Internet. In diesem Artikel haben Sie alles über Proxy-Server erfahren und gelernt, wie Sie mit Squid einen selbst gehosteten Proxy-Server einrichten. Darüber hinaus haben Sie gelernt, wie Sie einen lokalen Proxy-Server in Ihre Go-Anwendungen, also in diesem Fall einen Web-Scraper, integrieren.

Wenn Sie Interesse daran haben, mit Proxy-Servern zu arbeiten, sollten Sie Bright Data in Betracht ziehen. Das hochmoderne Proxy-Netzwerk von Bright Data kann Sie bei der schnellen Datenerfassung unterstützen, ohne sich dabei Gedanken über eine zusätzliche Infrastruktur oder Wartung machen zu müssen