Cara Menggunakan HttpClient (Perpustakaan C#) untuk Web Scraping

Rajinder Singh
Deep Learning Researcher
13-Sep-2024

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
Install-Package HtmlAgilityPack
- Instal Newtonsoft.Json untuk menangani respons JSON:
bash
Install-Package Newtonsoft.Json
Contoh: Mengikis "Quotes to Scrape"
Mari kita kikis kutipan dari situs web Quotes to Scrape menggunakan HttpClient dan HtmlAgilityPack.
csharp
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
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
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:
-
Metode CreateTask:
- Metode ini mengirimkan permintaan POST ke titik akhir
/createTaskCapsolver untuk membuat tugas baru untuk menyelesaikan tantangan reCAPTCHA v2. - Permintaan tersebut mencakup
clientKey,websiteURL,websiteKey, dan menentukan jenis tugas sebagaiReCaptchaV2TaskProxyLess. - Metode ini mengembalikan
taskId, yang akan digunakan untuk mengambil hasil tugas.
- Metode ini mengirimkan permintaan POST ke titik akhir
-
Metode GetTaskResult:
- Metode ini mengirimkan permintaan POST ke titik akhir
/getTaskResultuntuk 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.
- Metode ini mengirimkan permintaan POST ke titik akhir
Contoh: Menyelesaikan reCAPTCHA v3 dengan Capsolver
Pada bagian ini, kita akan menunjukkan cara menyelesaikan tantangan reCAPTCHA v3 menggunakan Capsolver API dan HttpClient.
csharp
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:
-
Metode CreateTask:
- Metode ini mengirimkan permintaan POST ke titik akhir
/createTaskCapsolver untuk membuat tugas baru untuk menyelesaikan tantangan reCAPTCHA v3. - Permintaan tersebut mencakup
clientKey,websiteURL,websiteKey, dan menentukan jenis tugas sebagaiReCaptchaV3TaskProxyLess. - Metode ini mengembalikan
taskId, yang akan digunakan untuk mengambil hasil tugas.
- Metode ini mengirimkan permintaan POST ke titik akhir
-
Metode GetTaskResult:
- Metode ini mengirimkan permintaan POST ke titik akhir
/getTaskResultuntuk 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.
- Metode ini mengirimkan permintaan POST ke titik akhir
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 filerobots.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#.
Pernyataan Kepatuhan: Informasi yang diberikan di blog ini hanya untuk tujuan informasi. CapSolver berkomitmen untuk mematuhi semua hukum dan peraturan yang berlaku. Penggunaan jaringan CapSolver untuk kegiatan ilegal, penipuan, atau penyalahgunaan sangat dilarang dan akan diselidiki. Solusi penyelesaian captcha kami meningkatkan pengalaman pengguna sambil memastikan kepatuhan 100% dalam membantu menyelesaikan kesulitan captcha selama pengambilan data publik. Kami mendorong penggunaan layanan kami secara bertanggung jawab. Untuk informasi lebih lanjut, silakan kunjungi Syarat Layanan dan Kebijakan Privasi.
Lebih lanjut

Apa yang terbaik ekstensi untuk menyelesaikan CAPTCHA 2026?
Dalam dunia keamanan online yang terus berkembang, tantangan CAPTCHA telah menjadi hambatan umum bagi pengguna internet...

Emma Foster
12-Dec-2025

Lumiproxy: Proxy Premium untuk Pengambilan Data Web & Pengumpulan Data
Dalam artikel ini, kami akan menunjukkan kepada Anda apa itu Lumiproxy dan layanan yang mereka tawarkan.

Emma Foster
12-Dec-2025

Genlogin: Mengubah Secara Revolusioner Pengalaman Otomatisasi Web Anda
Dalam artikel ini, kami akan menunjukkan kepada Anda apa itu Genlogin dan layanan yang mereka tawarkan.

Nikolai Smirnov
12-Dec-2025

Proxys.io: Proxy individu untuk tugas apa pun
Dalam artikel ini, kami akan menunjukkan kepada Anda apa itu Proxys.io dan layanan yang mereka tawarkan.

Nikolai Smirnov
12-Dec-2025

Tabproxy: Nilai yang baik proxy perumahan luar negeri
Dalam artikel ini, kami akan menunjukkan kepada Anda apa itu Tabproxy dan layanan yang mereka tawarkan.

Emma Foster
12-Dec-2025

IP2World Proxy Rumah: Solusi Proxy IP Global Terkemuka
Dalam artikel ini, kami akan menunjukkan kepada Anda apa itu IP2World dan layanan yang mereka tawarkan.

Ethan Collins
12-Dec-2025

