Article title on dark background

Jede Online-Aktivität hinterlässt Spuren und kann mitunter Ihre Sicherheit gefährden oder Sie am Web Scraping hindern. Proxys helfen Ihnen, unter dem Radar von Anti-Detection-Systemen zu bleiben, ohne Ihre Aufgaben zu beeinträchtigen. In diesem Artikel zeigen wir Ihnen, wie Sie DataImpulse-Proxys mit .NET in C# integrieren, damit Sie sich keine Sorgen mehr über Rate Limits oder mögliche Angriffsflächen für böswillige Akteure machen müssen.

Erste Schritte

Zunächst müssen Sie sicherstellen, dass die folgenden benötigten Tools auf Ihrem Gerät installiert sind:

  • Visual Studio Code (Visual Studio 2022 oder jede andere IDE mit Unterstützung für .NET ist ebenfalls geeignet)
  • .NET 8
  • HtmlAgilityPack (in diesem Tutorial wird Version 1.6.11 verwendet)

Da wir in diesem Tutorial Proxys verwenden, benötigen Sie ein DataImpulse-Konto und einen Tarif, der zu Ihren Anforderungen passt. Wir haben eine Schritt-für-Schritt-Anleitung dazu.

In diesem Tutorial scrapen wir als Beispiel unsere Website DataImpulse.com. Sie können den Code jedoch problemlos an Ihre Aufgaben anpassen und alle Quellen scrapen, die Sie benötigen. Achten Sie natürlich stets darauf, nicht gegen die Nutzungsbedingungen der Websites zu verstoßen, von denen Sie Daten erfassen.

Einen HTTP-Client erstellen

Zuerst müssen Sie einen HTTP-Client erstellen, um Ihren Datenverkehr über einen bestimmten Proxy-Server zu leiten. Dabei handelt es sich um eine einfache Konsolen-App, die Anfragen an die benötigte URL sendet und Antworten abruft, alles über einen Proxy-Server. Sie können den folgenden Code kopieren. 


using System.Net;

class HttpClientApp
{
    public static void Main(string[] args)
    {
        DownloadPageAsync().Wait();
    }

    private static async Task DownloadPageAsync()
    {
        string page = "https://api.ipify.org/"; // Example API to get the public IP address

        // Configure proxy
        var proxy = new WebProxy("gw.dataimpulse.com:823")
        {
            UseDefaultCredentials = false,
            Credentials = new NetworkCredential("your login", "your password")
        };

        // Set up HTTP client handler with proxy
        var httpClientHandler = new HttpClientHandler
        {
            Proxy = proxy,
            UseProxy = true
        };

        using (var client = new HttpClient(handler: httpClientHandler, disposeHandler: true))
        {
            try
            {
                // Send the HTTP GET request
                var response = await client.GetAsync(page);

                // Check if the response is successful
                response.EnsureSuccessStatusCode();

                // Get the content of the response
                string result = await response.Content.ReadAsStringAsync();
                Console.WriteLine("Response received: ");
                Console.WriteLine(result);
                Console.WriteLine("Press any key to exit.");
                Console.ReadLine(); // Keep the console open to display the result
            }
            catch (HttpRequestException e)
            {
                Console.WriteLine($"Request error: {e.Message}");
                Console.WriteLine("Press any key to exit.");
                Console.ReadLine(); // Keep the console open to display the result
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Unexpected error: {ex.Message}");
                Console.WriteLine("Press any key to exit.");
                Console.ReadLine(); // Keep the console open to display the result
            }
        }
    }
}

      
        

      

Um diese und die folgenden Apps auszuführen, geben Sie den folgenden Befehl im Terminal im Stammverzeichnis Ihrer App ein.


dotnet run --project NameOfProject
      
        

      

Die Ausgabe sollte wie folgt aussehen:

Proxy-Rotation implementieren

Es reicht nicht aus, Ihren Datenverkehr über einen Proxy-Server zu leiten. Um die Richtlinien für den Datenverkehr einzuhalten, müssen Sie für jede Anfrage eine neue IP-Adresse verwenden. Der nächste Schritt besteht daher darin, einen Proxy-Rotator zu erstellen, der zufällig eine Adresse aus unserem Pool auswählt.


using System.Net;

class ProxyRotator
{
    // List of proxies to rotate through
    private static List proxies = new List
    {
        new WebProxy("http://gw.dataimpulse.com:10000"),
        new WebProxy("http://gw.dataimpulse.com:10001"),
        new WebProxy("http://gw.dataimpulse.com:10002")
    };

    public static void Main(string[] args)
    {
        MakeRequestsWithRotation().Wait();
    }

    private static async Task MakeRequestsWithRotation()
    {
        // Example URLs to request
        string url = "https://api.ipify.org/";

        for (int i = 0; i < proxies.Count; i++)
        {
            // Send request using each proxy
            Console.WriteLine($"Using proxy: {proxies[i].Address}");
            try
            {
                var response = await SendRequestWithProxy(url, proxies[i]);
                if (response.IsSuccessStatusCode)
                {
                    Console.WriteLine($"Request succeeded with proxy {proxies[i].Address}");
                    string responseBody = await response.Content.ReadAsStringAsync();
                    Console.WriteLine($"IP address from API website: {responseBody}");  // Print or process the response as needed
                }
                else
                {
                    Console.WriteLine($"Request failed with proxy {proxies[i].Address}, Status Code: {response.StatusCode}");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Exception with proxy {proxies[i].Address}: {ex.Message}");
            }
        }
    }

    // Function to send request using a specific proxy
    private static async Task SendRequestWithProxy(string url, WebProxy proxy)
    {
        HttpClientHandler handler = new HttpClientHandler
        {
            Proxy = proxy,
            UseProxy = true
        };

        using (HttpClient client = new HttpClient(handler))
        {
            return await client.GetAsync(url);
        }
    }
}

      
        

      

Im obigen Beispiel stellen wir eine Liste von Proxys für die Rotation bereit, in unserem Fall 3 Proxys, und prüfen die rotierenden IP-Adressen über die http://api.ipify.org/-URL. Das Ergebnis sollte wie folgt aussehen:

Einen Proxy-Checker erstellen

Um sicherzustellen, dass die Proxys funktionieren, müssen wir einen Proxy-Checker einrichten. Er sendet eine HTTP-Anfrage an einen Proxy-Server und teilt Ihnen mit, ob ein Server gültig ist oder nicht. Wir verwenden dataimpulse.com, aber jeder andere Link funktioniert ebenfalls.


using System.Net;

class ProxyChecker
{
    // Entry point renamed to avoid conflict
    public static void Main(string[] args)
    {
        string proxyAddress = "gw.dataimpulse.com"; // Replace with your proxy address
        // Replace with your proxy ports
        var proxyPortStart = 10000; 
        var proxyPortEnd = 10100;

        var tasks = new List();
        for (var proxyPort = proxyPortStart; proxyPort < proxyPortEnd; proxyPort++)
        {
            tasks.Add(CheckProxy(proxyAddress, proxyPort));
        }

        Task.WaitAll(tasks.ToArray());
    }

    public static async Task CheckProxy(string proxyAddress, int proxyPort)
    {
        var proxy = new WebProxy(proxyAddress, proxyPort)
        {
            // Uncomment and modify if the proxy requires credentials
            Credentials = new NetworkCredential("your login", "your password"),
            BypassProxyOnLocal = false
        };

        var httpClientHandler = new HttpClientHandler
        {
            Proxy = proxy,
            UseProxy = true
        };

        using (var client = new HttpClient(httpClientHandler))
        {
            try
            {
                client.Timeout = TimeSpan.FromSeconds(10); // Set a timeout
                var response = await client.GetAsync("https://api.ipify.org/"); // You can use any URL for testing
                if (response.IsSuccessStatusCode)
                {
                    Console.WriteLine("Proxy is working: " + proxyAddress + ":" + proxyPort);
                }
                else
                {
                    Console.WriteLine("Proxy is not working (Invalid response): " + proxyAddress + ":" + proxyPort);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Proxy is not working (Exception): " + proxyAddress + ":" + proxyPort + " - " + ex.Message);
            }
        }
    }
}

      
        

      

Hier müssen Sie Hostname, Port und Zugangsdaten angeben. Sie finden sie in Ihrem DI-Dashboard auf dem Tab des entsprechenden Tarifs. Außerdem müssen Sie ein Timeout in Sekunden festlegen.

Hier sehen Sie ein Beispiel für das Ergebnis:

Daten scrapen

Das Herzstück unseres Projekts ist ein Web Scraper. Er sendet eine HTTP-Anfrage und sammelt HTML-Daten von der DataImpulse-Startseite.


using System.Net;
using HtmlAgilityPack;

class WebScraper
{
    public static void Main(string[] args)
    {
        Scrape().Wait();
    }

    private static async Task Scrape()
    {
        // Define the proxy details
        string proxyAddress = "http://gw.dataimpulse.com:823"; // Replace with your proxy address
        string proxyUsername = "your login"; // Replace with your proxy username (if needed)
        string proxyPassword = "your password"; // Replace with your proxy password (if needed)

        // Create a Proxy Handler
        var httpClientHandler = new HttpClientHandler
        {
            Proxy = new WebProxy(proxyAddress)
            {
                Credentials = new NetworkCredential(proxyUsername, proxyPassword)
            },
            UseProxy = true
        };

        // Create an HttpClient using the handler with the proxy
        using (var client = new HttpClient(httpClientHandler))
        {
            // Define the target URL to scrape
            string url = "https://dataimpulse.com/";
            var baseUri = new Uri(url);

            try
            {
                // Send GET request
                var response = await client.GetAsync(url);

                // Use the new code snippet here
                if (response.IsSuccessStatusCode)
                {
                    var content = await response.Content.ReadAsStringAsync();

                    // Load the HTML content into an HtmlDocument
                    HtmlDocument doc = new();
                    doc.LoadHtml(content);

                    // Use XPath to find all  tags that are direct children of 
  • ,

    , or var nodes = doc.DocumentNode.SelectNodes("//li/a[@href] | //p/a[@href] | //td/a[@href]"); if (nodes != null) { foreach (var node in nodes) { string hrefValue = node.GetAttributeValue("href", string.Empty); string title = node.InnerText; // This gets the text content of the tag, which is usually the title var fullUri = new Uri(baseUri, hrefValue); Console.WriteLine($"Title: {title}, Link: {fullUri.AbsoluteUri}"); // You can process each title and link as required } } else { Console.WriteLine("No matching nodes found."); } } else { Console.WriteLine($"Failed to scrape. Status code: {response.StatusCode}"); } } catch (Exception ex) { Console.WriteLine($"An error occurred: {ex.Message}"); } } } }

  • Sie können dies jedoch anpassen und die Daten abrufen, die Sie benötigen. 

    Warum DataImpulse?

    Für Web-Scraping-Projekte könnten öffentliche Proxys verlockend wirken, da sie eine hervorragende Möglichkeit zum Sparen zu sein scheinen. Kostenlose Proxys bergen jedoch zahlreiche Risiken, von fehlgeschlagenen oder langsamen Verbindungen bis hin zu Lecks personenbezogener Daten, denn Sie wissen nie, wer diese Server verwaltet. Wenn Sie alle Gründe nachlesen möchten, warum Sie kostenlose Proxys vermeiden sollten, sehen Sie sich diese Artikel an: Warum sollten Sie keine gefälschten IPs und kostenlosen Proxys verwenden? und Von geringer Geschwindigkeit bis zu Sicherheitsrisiken: Warum Sie kostenlose Proxys vermeiden sollten. Deshalb sollten Sie sich an vertrauenswürdige Anbieter wenden. DataImpulse bietet Ihnen rechtmäßig beschaffte IP-Adressen, die nicht mit böswilligen Aktivitäten verbunden sind, sowie preisgünstige Tarife. Beispielsweise können Sie Residential Proxys für $1 pro 1 GB kaufen. Wir arbeiten mit einem Pay-as-you-go-Preismodell, sodass Sie sich keine Sorgen machen müssen, dass Ihr Traffic verfällt. Klicken Sie oben rechts auf dem Bildschirm auf die Schaltfläche “Jetzt testen” oder schreiben Sie uns an[email protected]

    Share article: