• Harga
Mulai Sekarang

© 2026 CapSolver. All rights reserved.

Hubungi Kami

Slack: lola@capsolver.com

Produk

  • reCAPTCHA v2
  • reCAPTCHA v3
  • Cloudflare Turnstile
  • Cloudflare Challenge
  • AWS WAF
  • Ekstensi Browser
  • Lebih banyak jenis CAPTCHA

Integrasi

  • Selenium
  • Playwright
  • Puppeteer
  • n8n
  • Mitra
  • Lihat semua integrasi

Sumber Daya

  • Program Referensi
  • Dokumentasi
  • Referensi API
  • Blog
  • FAQ
  • Glosarium
  • Status

Legal

  • Ketentuan Layanan
  • Kebijakan Privasi
  • Kebijakan Pengembalian Dana
  • Jangan jual informasi pribadi saya
Blog/All/Cara Menggunakan HttpClient (Perpustakaan C#) untuk Web Scraping
Sep16, 2024

Cara Menggunakan HttpClient (Perpustakaan C#) untuk Web Scraping

Rajinder Singh

Rajinder Singh

Deep Learning Researcher

Tantangan CAPTCHA, seperti Google reCAPTCHA, umumnya digunakan oleh situs web untuk memblokir bot dan mencegah akses otomatis ke konten mereka. Untuk melewati tantangan tersebut secara terprogram, Anda dapat menggunakan layanan seperti Capsolver yang menawarkan solusi berbasis API untuk menyelesaikan CAPTCHA ini.

Dalam panduan ini, kami akan menunjukkan kepada Anda cara:

  • Mengikis situs web menggunakan C# HttpClient dan HtmlAgilityPack.
  • Menyelesaikan tantangan reCAPTCHA menggunakan Capsolver API.

Web Scraping dengan C# HttpClient

Di C#, kelas HttpClient umumnya digunakan untuk mengirimkan permintaan HTTP dan menerima respons dari situs web. Anda dapat menggabungkannya dengan parser HTML seperti HtmlAgilityPack untuk mengekstrak data dari halaman web.

Prasyarat

  • Instal perpustakaan HtmlAgilityPack menggunakan NuGet Package Manager untuk membantu parsing konten HTML:
bash Copy
Install-Package HtmlAgilityPack
  • Instal Newtonsoft.Json untuk menangani respons JSON:
bash Copy
Install-Package Newtonsoft.Json

Contoh: Mengikis "Quotes to Scrape"

Mari kita kikis kutipan dari situs web Quotes to Scrape menggunakan HttpClient dan HtmlAgilityPack.

csharp Copy
using System;
using System.Net.Http;
using System.Threading.Tasks;
using HtmlAgilityPack;

class Program
{
    private static readonly HttpClient client = new HttpClient();

    static async Task Main(string[] args)
    {
        string url = "http://quotes.toscrape.com/";

        // Kirim permintaan GET ke halaman
        HttpResponseMessage response = await client.GetAsync(url);

        if (response.IsSuccessStatusCode)
        {
            // Parse konten halaman menggunakan HtmlAgilityPack
            string pageContent = await response.Content.ReadAsStringAsync();
            HtmlDocument htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(pageContent);

            // Temukan semua kutipan di halaman
            var quotes = htmlDoc.DocumentNode.SelectNodes("//span[@class='text']");

            // Cetak setiap kutipan
            foreach (var quote in quotes)
            {
                Console.WriteLine(quote.InnerText);
            }
        }
        else
        {
            Console.WriteLine($"Gagal mengambil halaman. Kode Status: {response.StatusCode}");
        }
    }
}

Penjelasan:

  • HttpClient: Mengirimkan permintaan GET ke situs web.
  • HtmlAgilityPack: Menganalisis konten HTML dan mengekstrak kutipan dengan memilih elemen dengan kelas text.

Menyelesaikan reCAPTCHA v3 & reCaptcha v2 dengan Capsolver menggunakan HttpClient

Saat situs web menggunakan reCAPTCHA v3 & reCaptcha v2 untuk keamanan, Anda dapat menyelesaikan CAPTCHA menggunakan Capsolver API. Berikut ini adalah cara Anda dapat mengintegrasikan Capsolver dengan HttpClient untuk menyelesaikan tantangan reCAPTCHA.

Prasyarat

  • Newtonsoft.Json digunakan untuk menangani parsing JSON dari respons Capsolver:
bash Copy
Install-Package Newtonsoft.Json

Contoh: Menyelesaikan reCAPTCHA v2 dengan Capsolver

Pada bagian ini, kita akan menunjukkan cara menyelesaikan tantangan reCAPTCHA v2 menggunakan Capsolver API dan HttpClient.

csharp Copy
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;

class Program
{
    private static readonly string apiUrl = "https://api.capsolver.com";
    private static readonly string clientKey = "YOUR_API_KEY"; // Ganti dengan Capsolver API Key Anda

    static async Task Main(string[] args)
    {
        try
        {
            // Langkah 1: Buat tugas untuk menyelesaikan reCAPTCHA v3
            string taskId = await CreateTask();
            Console.WriteLine("ID Tugas: " + taskId);

            // Langkah 2: Ambil hasil tugas
            string taskResult = await GetTaskResult(taskId);
            Console.WriteLine("Hasil Tugas (Token CAPTCHA): " + taskResult);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Kesalahan: " + ex.Message);
        }
    }

    // Metode untuk membuat tugas pemecahan CAPTCHA baru
    private static async Task<string> CreateTask()
    {
        using (HttpClient client = new HttpClient())
        {
            // Beban permintaan
            var requestBody = new
            {
                clientKey = clientKey,
                task = new
                {
                    type = "ReCaptchaV2TaskProxyLess", // Jenis tugas untuk reCAPTCHA v3 tanpa proxy
                    websiteURL = "", // URL situs web untuk menyelesaikan CAPTCHA
                    websiteKey = "" // Kunci situs reCAPTCHA
                }
            };

            // Kirim permintaan untuk membuat tugas
            var content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json");
            HttpResponseMessage response = await client.PostAsync($"{apiUrl}/createTask", content);
            string responseContent = await response.Content.ReadAsStringAsync();

            if (!response.IsSuccessStatusCode)
            {
                throw new Exception("Gagal membuat tugas: " + responseContent);
            }

            JObject jsonResponse = JObject.Parse(responseContent);
            if (jsonResponse["errorId"].ToString() != "0")
            {
                throw new Exception("Kesalahan membuat tugas: " + jsonResponse["errorDescription"]);
            }

            // Kembalikan ID tugas yang akan digunakan di langkah selanjutnya
            return jsonResponse["taskId"].ToString();
        }
    }

    // Metode untuk mengambil hasil dari tugas pemecahan CAPTCHA
    private static async Task<string> GetTaskResult(string taskId)
    {
        using (HttpClient client = new HttpClient())
        {
            // Beban permintaan
            var requestBody = new
            {
                clientKey = clientKey,
                taskId = taskId
            };

            var content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json");

            // Polling untuk hasil tugas setiap 5 detik
            while (true)
            {
                HttpResponseMessage response = await client.PostAsync($"{apiUrl}/getTaskResult", content);
                string responseContent = await response.Content.ReadAsStringAsync();

                if (!response.IsSuccessStatusCode)
                {
                    throw new Exception("Gagal mendapatkan hasil tugas: " + responseContent);
                }

                JObject jsonResponse = JObject.Parse(responseContent);
                if (jsonResponse["errorId"].ToString() != "0")
                {
                    throw new Exception("Kesalahan mendapatkan hasil tugas: " + jsonResponse["errorDescription"]);
                }

                // Jika tugas siap, kembalikan token CAPTCHA
                if (jsonResponse["status"].ToString() == "ready")
                {
                    return jsonResponse["solution"]["gRecaptchaResponse"].ToString();
                }

                // Tunggu 5 detik sebelum memeriksa lagi
                Console.WriteLine("Tugas masih diproses, menunggu 5 detik...");
                await Task.Delay(5000);
            }
        }
    }
}

Penjelasan:

  1. Metode CreateTask:

    • Metode ini mengirimkan permintaan POST ke titik akhir /createTask Capsolver untuk membuat tugas baru untuk menyelesaikan tantangan reCAPTCHA v2.
    • Permintaan tersebut mencakup clientKey, websiteURL, websiteKey, dan menentukan jenis tugas sebagai ReCaptchaV2TaskProxyLess.
    • Metode ini mengembalikan taskId, yang akan digunakan untuk mengambil hasil tugas.
  2. Metode GetTaskResult:

    • Metode ini mengirimkan permintaan POST ke titik akhir /getTaskResult untuk memeriksa hasil dari tugas yang dibuat sebelumnya.
    • Ia terus melakukan polling status tugas setiap 5 detik hingga tugas selesai (status: siap).
    • Setelah tugas siap, ia mengembalikan gRecaptchaResponse, yang dapat digunakan untuk melewati CAPTCHA.

Contoh: Menyelesaikan reCAPTCHA v3 dengan Capsolver

Pada bagian ini, kita akan menunjukkan cara menyelesaikan tantangan reCAPTCHA v3 menggunakan Capsolver API dan HttpClient.

csharp Copy
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;

class Program
{
    private static readonly string apiUrl = "https://api.capsolver.com";
    private static readonly string clientKey = "YOUR_API_KEY"; // Ganti dengan Capsolver API Key Anda

    static async Task Main(string[] args)
    {
        try
        {
            // Langkah 1: Buat tugas untuk menyelesaikan reCAPTCHA v3
            string taskId = await CreateTask();
            Console.WriteLine("ID Tugas: " + taskId);

            // Langkah 2: Ambil hasil tugas
            string taskResult = await GetTaskResult(taskId);
            Console.WriteLine("Hasil Tugas (Token CAPTCHA): " + taskResult);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Kesalahan: " + ex.Message);
        }
    }

    // Metode untuk membuat tugas pemecahan CAPTCHA baru
    private static async Task<string> CreateTask()
    {
        using (HttpClient client = new HttpClient())
        {
            // Beban permintaan
            var requestBody = new
            {
                clientKey = clientKey,
                task = new
                {
                    type = "ReCaptchaV3TaskProxyLess", // Jenis tugas untuk reCAPTCHA v3 tanpa proxy
                    websiteURL = "", // URL situs web untuk menyelesaikan CAPTCHA
                    websiteKey = "" // Kunci situs reCAPTCHA
                }
            };

            // Kirim permintaan untuk membuat tugas
            var content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json");
            HttpResponseMessage response = await client.PostAsync($"{apiUrl}/createTask", content);
            string responseContent = await response.Content.ReadAsStringAsync();

            if (!response.IsSuccessStatusCode)
            {
                throw new Exception("Gagal membuat tugas: " + responseContent);
            }

            JObject jsonResponse = JObject.Parse(responseContent);
            if (jsonResponse["errorId"].ToString() != "0")
            {
                throw new Exception("Kesalahan membuat tugas: " + jsonResponse["errorDescription"]);
            }

            // Kembalikan ID tugas yang akan digunakan di langkah selanjutnya
            return jsonResponse["taskId"].ToString();
        }
    }

    // Metode untuk mengambil hasil dari tugas pemecahan CAPTCHA
    private static async Task<string> GetTaskResult(string taskId)
    {
        using (HttpClient client = new HttpClient())
        {
            // Beban permintaan
            var requestBody = new
            {
                clientKey = clientKey,
                taskId = taskId
            };

            var content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json");

            // Polling untuk hasil tugas setiap 5 detik
            while (true)
            {
                HttpResponseMessage response = await client.PostAsync($"{apiUrl}/getTaskResult", content);
                string responseContent = await response.Content.ReadAsStringAsync();

                if (!response.IsSuccessStatusCode)
                {
                    throw new Exception("Gagal mendapatkan hasil tugas: " + responseContent);
                }

                JObject jsonResponse = JObject.Parse(responseContent);
                if (jsonResponse["errorId"].ToString() != "0")
                {
                    throw new Exception("Kesalahan mendapatkan hasil tugas: " + jsonResponse["errorDescription"]);
                }

                // Jika tugas siap, kembalikan token CAPTCHA
                if (jsonResponse["status"].ToString() == "ready")
                {
                    return jsonResponse["solution"]["gRecaptchaResponse"].ToString();
                }

                // Tunggu 5 detik sebelum memeriksa lagi
                Console.WriteLine("Tugas masih diproses, menunggu 5 detik...");
                await Task.Delay(5000);
            }
        }
    }
}

Penjelasan:

  1. Metode CreateTask:

    • Metode ini mengirimkan permintaan POST ke titik akhir /createTask Capsolver untuk membuat tugas baru untuk menyelesaikan tantangan reCAPTCHA v3.
    • Permintaan tersebut mencakup clientKey, websiteURL, websiteKey, dan menentukan jenis tugas sebagai ReCaptchaV3TaskProxyLess.
    • Metode ini mengembalikan taskId, yang akan digunakan untuk mengambil hasil tugas.
  2. Metode GetTaskResult:

    • Metode ini mengirimkan permintaan POST ke titik akhir /getTaskResult untuk memeriksa hasil dari tugas yang dibuat sebelumnya.
    • Ia terus melakukan polling status tugas setiap 5 detik hingga tugas selesai (status: siap).
    • Setelah tugas siap, ia mengembalikan gRecaptchaResponse, yang dapat digunakan untuk melewati CAPTCHA.

Praktik Terbaik Web Scraping di C#

Saat menggunakan alat web scraping di C#, selalu ikuti praktik terbaik berikut ini:

  • Hormati robots.txt: Pastikan situs web mengizinkan web scraping dengan memeriksa file robots.txt.
  • Pembatasan Kecepatan: Hindari membuat terlalu banyak permintaan dalam jangka waktu singkat untuk mencegah pemblokiran oleh situs web.
  • Rotasi Proxy: Gunakan proxy untuk mendistribusikan permintaan di berbagai IP untuk menghindari pelabelan sebagai bot.
  • Header Palsu: Tiru permintaan seperti browser dengan menambahkan header kustom, seperti User-Agent, ke permintaan HTTP Anda.

Kesimpulan

Dengan menggunakan HttpClient untuk web scraping dan Capsolver untuk pemecahan CAPTCHA, Anda dapat secara efektif mengotomatiskan interaksi dengan situs web yang menggunakan tantangan CAPTCHA. Selalu pastikan bahwa aktivitas web scraping Anda mematuhi persyaratan layanan dan persyaratan hukum situs web target.

Selamat mengikis!


Panduan ini mengintegrasikan web scraping menggunakan HtmlAgilityPack dan menunjukkan cara menangani tantangan reCAPTCHA dengan Capsolver, hanya menggunakan HttpClient di C#.

Lihat Lebih Banyak

May 08, 2026

ReCAPTCHA dalam Pengambilan Data Ecommerce: Panduan Berfokus pada Kepatuhan

Pelajari cara mengelola reCAPTCHA selama pengambilan data e-commerce dengan alur kerja yang sesuai aturan, diagnosa, contoh dari CapSolver, dan pengendalian risiko yang nyata.

Emma Foster
Emma Foster
May 08, 2026

Bagaimana Cara Kerja Ekstraksi Data AI: Penyelesaian CAPTCHA, Parsing LLM & Pipeline Data Web Terstruktur

Pelajari bagaimana ekstraksi data yang didukung AI bekerja dari pengambilan data dari web dan menyelesaikan CAPTCHA hingga pembersihan HTML, parsing LLM, dan generasi JSON terstruktur. Eksplor strategi menghindari bot, kerangka kerja ekstraksi semantik seperti AXE, dan pipa pengambilan data web AI yang dapat diskalakan.

Emma Foster

Daftar Isi

Emma Foster
May 07, 2026

Terbaik Framework Agen AI untuk Otomatisasi Web dan Pemecahan CAPTCHA

Bandingkan kerangka kerja agen AI terbaik untuk otomatisasi web, penyelesaian CAPTCHA, kepatuhan, dan alur kerja agen yang siap produksi pada tahun 2026.

Emma Foster
Emma Foster
May 07, 2026

Pustaka Java Web Scraping Terbaik untuk Ekstraksi Data yang Andal

Membandingkan pustaka pengambilan data web Java terbaik, termasuk jsoup, Selenium, Playwright untuk Java, HtmlUnit, Apache Nutch, dan pilihan API.

Emma Foster
Emma Foster