Article title on dark background

Setiap aktivitas online meninggalkan jejak. Terkadang, hal itu dapat membahayakan keamanan Anda atau menghalangi Anda melakukan web scraping. Proxy membantu Anda menghindari deteksi oleh sistem anti-detection tanpa menghambat pekerjaan Anda. Dalam artikel ini, kami akan menunjukkan cara mengintegrasikan proxy DataImpulse di C# menggunakan .NET agar Anda tidak perlu lagi khawatir terkena rate limit atau membuka celah bagi pelaku kejahatan.

Memulai

Pertama, pastikan beberapa alat yang diperlukan telah terinstal di perangkat Anda:

  • Visual Studio Code (Visual Studio 2022 atau IDE lain yang mendukung .NET juga dapat digunakan)
  • .NET 8
  • HtmlAgilityPack (tutorial ini menggunakan versi 1.6.11)

Karena tutorial ini menggunakan proxy, Anda memerlukan akun DataImpulse dan paket yang sesuai dengan kebutuhan Anda. Kami memiliki panduan langkah demi langkah tentang cara melakukannya.

Dalam tutorial ini, kami melakukan scraping pada situs web kami, DataImpulse.com, sebagai contoh. Namun, Anda dapat dengan mudah menyesuaikan kode sesuai kebutuhan dan melakukan scraping pada sumber apa pun yang Anda perlukan. Tentu saja, selalu pastikan Anda tidak melanggar ketentuan layanan situs web tempat Anda mengumpulkan data.

Membuat klien HTTP

Pertama, Anda harus membuat klien HTTP untuk merutekan lalu lintas Anda melalui server proxy yang ditentukan. Ini adalah aplikasi konsol sederhana yang mengirim request ke URL yang diperlukan dan mengambil respons, semuanya melalui server proxy. Anda dapat menyalin potongan kode di bawah ini. 


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

      
        

      

Untuk menjalankan aplikasi ini dan aplikasi berikutnya, ketik perintah berikut di terminal pada direktori utama aplikasi Anda.


dotnet run --project NameOfProject
      
        

      

Hasilnya akan terlihat seperti ini:

Menerapkan rotasi proxy

Merutekan lalu lintas melalui server proxy saja tidak cukup. Agar beroperasi sesuai pedoman lalu lintas, Anda harus menggunakan alamat IP baru untuk setiap request. Jadi, langkah berikutnya adalah membuat rotator proxy untuk memilih alamat acak dari kumpulan kami.


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

      
        

      

Pada contoh di atas, kami menyediakan daftar proxy untuk digunakan secara rotating (dalam kasus kami, 3 proxy) dan memeriksa alamat IP rotating melalui URL http://api.ipify.org/ tersebut. Hasilnya akan terlihat seperti ini:

Membuat pemeriksa proxy

Untuk memastikan proxy berfungsi, kita perlu menyiapkan pemeriksa proxy. Alat ini mengirim request HTTP ke server proxy dan memberi tahu Anda apakah server tersebut sah atau tidak. Kami menggunakan dataimpulse.com, tetapi tautan lain juga dapat digunakan.


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

      
        

      

Di sini, Anda harus menentukan hostname, port, dan kredensial. Anda dapat menemukannya di dasbor DI Anda, pada tab paket yang diperlukan. Anda juga perlu menetapkan batas waktu dalam detik.

Berikut contoh hasil yang Anda dapatkan:

Melakukan scraping data

Inti proyek kami adalah web scraper. Alat ini mengirim request HTTP dan mengumpulkan data HTML dari halaman utama DataImpulse.


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

  • Namun, Anda dapat mengubahnya dan mendapatkan data yang diperlukan. 

    Mengapa DataImpulse?

    Anda mungkin tergoda menggunakan proxy publik untuk proyek web scraping karena tampak sebagai cara terbaik untuk menghemat biaya. Namun, proxy gratis menimbulkan banyak risiko, mulai dari koneksi yang gagal atau lambat hingga kebocoran data pribadi, karena Anda tidak pernah tahu siapa yang mengelola server tersebut. Jika Anda ingin membaca semua alasan untuk menghindari proxy gratis, lihat artikel berikut: Mengapa Anda tidak sebaiknya menggunakan IP palsu dan proxy gratis dan Dari kecepatan rendah hingga ancaman keamanan: mengapa Anda harus menghindari proxy gratis. Karena itu, Anda sebaiknya memilih penyedia tepercaya. DataImpulse menawarkan alamat IP yang diperoleh secara legal, tidak terkait aktivitas berbahaya, serta paket dengan harga terjangkau. Misalnya, Anda dapat membeli proxy residential seharga $1 per 1 GB. Kami beroperasi dengan model harga pay-as-you-go, jadi Anda tidak perlu khawatir lalu lintas akan kedaluwarsa. Klik tombol “Coba sekarang” di pojok kanan atas layar atau hubungi kami melalui[email protected]

    Share article: