Article title on dark background

Her çevrimiçi etkinlik bir iz bırakır; bu iz bazen güvenliğinizi tehlikeye atabilir veya web scraping yapmanızı engelleyebilir. Proxy’ler, görevlerinizi aksatmadan anti-detection sistemlerinin radarına takılmamanıza yardımcı olur. Bu makalede, hız sınırına takılma veya kötü niyetli kişiler için açık bırakma endişesi duymamanız için DataImpulse proxy’lerini .NET kullanarak C# ile nasıl entegre edeceğinizi göstereceğiz.

Başlarken

Öncelikle cihazınızda gerekli araçların yüklü olduğundan emin olmalısınız:

  • Visual Studio Code (Visual Studio 2022 veya .NET destekleyen başka herhangi bir IDE de uygundur)
  • .NET 8
  • HtmlAgilityPack (bu eğitimde 1.6.11 sürümü kullanılır)

Bu eğitimde proxy kullandığımız için bir DataImpulse hesabına ve ihtiyaçlarınıza uygun bir plana ihtiyacınız var. Bunun için adım adım rehberimiz bulunuyor.

Bu eğitimde DataImpulse.com sitesini örnek olarak kazıyoruz. Ancak kodu görevlerinize göre kolayca uyarlayabilir ve ihtiyacınız olan kaynaklardan veri çekebilirsiniz. Elbette, veri topladığınız web sitelerinin hizmet şartlarını hiçbir zaman ihlal etmediğinizden daima emin olmalısınız.

HTTP istemcisi oluşturma

Trafiğinizi belirlenmiş bir proxy sunucusu üzerinden yönlendirmek için önce bir HTTP istemcisi oluşturmalısınız. Bu, gerekli URL’ye istek gönderen ve yanıtları alan basit bir konsol uygulamasıdır; her şey proxy sunucusu üzerinden gerçekleşir. Aşağıdaki kod parçasını kopyalayabilirsiniz. 


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

      
        

      

Bunu ve sonraki uygulamaları çalıştırmak için uygulamanızın kök dizininde terminale aşağıdaki komutu yazın.


dotnet run --project NameOfProject
      
        

      

Çıktı aşağıdaki gibi görünmelidir:

Proxy rotasyonunu uygulama

Trafiğinizi proxy sunucusu üzerinden yönlendirmek tek başına yeterli değildir. Trafik yönergelerine uygun çalışmak için her istekte yeni bir IP adresi kullanmalısınız. Bu nedenle sonraki adım, havuzumuzdan rastgele bir adres seçen bir proxy rotatörü oluşturmaktır.


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);
        }
    }
}

      
        

      

Yukarıdaki örnekte, aralarında dönüşüm yapılacak bir proxy listesi sunuyoruz (bizim durumumuzda 3 proxy) ve sırayla değişen IP adreslerini http://api.ipify.org/ URL’si üzerinden kontrol ediyoruz. Sonuç aşağıdaki gibi görünmelidir:

Proxy denetleyicisi oluşturma

Proxy’lerin çalıştığından emin olmak için bir proxy denetleyicisi kurmalıyız. Bu araç bir proxy sunucusuna HTTP isteği gönderir ve sunucunun geçerli olup olmadığı yanıtını size döndürür. dataimpulse.com kullanıyoruz, ancak başka herhangi bir bağlantı da kullanılabilir.


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);
            }
        }
    }
}

      
        

      

Burada ana bilgisayar adını, portu ve kimlik bilgilerini belirtmelisiniz. Bunları DI kontrol panelinizde, ilgili plan sekmesinde bulabilirsiniz. Ayrıca saniye cinsinden bir zaman aşımı ayarlamanız gerekir.

Elde edeceğiniz sonuca bir örnek aşağıdadır:

Veri kazıma

Projemizin merkezinde bir web scraper yer alır. Bu araç HTTP isteği gönderir ve DataImpulse ana sayfasından HTML verilerini toplar.


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

  • Ancak bunu değiştirerek ihtiyacınız olan verileri alabilirsiniz. 

    Neden DataImpulse?

    Maliyet tasarrufu sağlamanın mükemmel bir yolu gibi göründüğü için web scraping projelerinde herkese açık proxy’leri kullanmak isteyebilirsiniz. Ancak bu sunucuları kimin yönettiğini asla bilemeyeceğinizden, ücretsiz proxy’ler başarısız veya yavaş bağlantıdan kişisel veri sızıntılarına kadar pek çok risk barındırır. Ücretsiz proxy’lerden kaçınmanızın tüm nedenlerini öğrenmek isterseniz şu makalelere göz atın: Sahte IP’leri ve ücretsiz proxy’leri neden kullanmamalısınız? ve Düşük hızdan güvenlik tehditlerine: ücretsiz proxy’lerden neden kaçınmalısınız?. Bu nedenle güvenilir sağlayıcılara yönelmelisiniz. DataImpulse, kötü niyetli faaliyetlerle ilişkili olmayan, yasal yollardan edinilmiş IP adresleri sunar ve bütçe dostu planlar sağlar. Örneğin, 1 GB residential proxy’yi $1 karşılığında satın alabilirsiniz. Kullandıkça öde fiyatlandırma modeliyle çalışıyoruz; bu nedenle trafiğinizin süresinin dolmasından endişelenmenize gerek kalmaz. Ekranın sağ üst köşesindeki “Hemen deneyin” düğmesine tıklayın veya bize şu adresten yazın:[email protected]

    Share article: