Dokumentasi API

Referensi untuk endpoint yang tersedia, format permintaan, parameter, dan contoh respons untuk mengintegrasikan API ke dalam aplikasi Anda.

Dokumentasi ini ditujukan untuk pengembang yang ingin mengintegrasikan CapSkip langsung ke skrip, aplikasi, atau sistem otomatisasi mereka sendiri. Pengguna perangkat lunak pihak ketiga sebaiknya mengikuti bagian Tutorials untuk instruksi penyiapan.

CapSkip mengemulasi API layanan pemecahan CAPTCHA yang banyak dipakai, sehingga dapat terhubung ke perangkat lunak pihak ketiga yang kompatibel tanpa memerlukan modifikasi apa pun. Integrasi biasanya hanya memerlukan CapSkip dalam keadaan berjalan.

Dokumentasi ini menjelaskan cara mengirimkan permintaan dan mengambil hasil. CapSkip mendukung beberapa keluarga API, termasuk API bergaya 2Captcha (in.php / res.php), API JSON createTask / getTaskResult yang dipakai AntiCaptcha, CapMonster, dan CapSolver, serta API REST DeathByCaptcha. Layanan dalam keluarga yang sama berbagi endpoint, format permintaan, dan format respons yang sama. Hanya base URL (host dan port) yang berbeda untuk setiap layanan.

Keluarga APILayanan
gaya 2captcha2captcha.com, rucaptcha.com, solvecaptcha.com, captchas.io
JSON (createTask / getTaskResult)anti-captcha.com, capmonster.cloud, capsolver.com
DeathByCaptchadeathbycaptcha.com

CAPTCHA Gambar

CAPTCHA biasa adalah gambar berisi teks terdistorsi tetapi masih terbaca manusia. Untuk memecahkannya, pengguna harus mengetik teks yang tampak pada gambar.

Untuk memecahkan CAPTCHA biasa, kirim gambar melalui permintaan HTTP POST ke endpoint API. Kirim permintaan langsung ke instance CapSkip Anda menggunakan alamat dan port lokal yang telah dikonfigurasi, misalnya: http://127.0.0.1:PORT/in.php

CapSkip menerima gambar dalam format multipart/form-data atau berkode Base64.

Contoh formulir multipart

<form method="post" action="http://127.0.0.1:PORT/in.php" enctype="multipart/form-data">
<input type="hidden" name="method" value="post">
Your key:
<input type="text" name="key" value="YOUR_APIKEY">
The CAPTCHA file:
<input type="file" name="file">
<input type="submit" value="Upload and get the ID">
</form>

YOUR_APIKEY mewakili API key Anda jika validasi API key diaktifkan di CapSkip. Jika validasi API key dinonaktifkan, nilai string apa pun akan diterima.

Contoh formulir Base64

<form method="post" action="http://127.0.0.1:PORT/in.php">
<input type="hidden" name="method" value="base64">
Your key:
<input type="text" name="key" value="YOUR_APIKEY">
The CAPTCHA file body in base64 format:
<textarea name="body">BASE64_FILE</textarea>
<input type="submit" value="Upload and get the ID">
</form>

YOUR_APIKEY mewakili API key Anda jika validasi API key diaktifkan di CapSkip. Jika validasi API key dinonaktifkan, nilai string apa pun akan diterima.

BASE64_FILE adalah data gambar yang dienkode Base64.

Daftar Parameter Permintaan POST
Parameter POSTTipeWajibDeskripsi
keyStringYa Kunci API CapSkip Anda.
methodStringYa post – kirim gambar menggunakan multipart/form-data
base64 – kirim gambar sebagai string berenkode Base64
fileFileYa* File gambar CAPTCHA.
* Wajib saat method=post.
bodyStringYa* Data gambar CAPTCHA berenkode Base64.
* Wajib saat method=base64.
jsonInteger
Default: 0
Tidak 0 – respons dikembalikan sebagai teks biasa
1 – respons dikembalikan dalam format JSON

Kirim CAPTCHA (unggah file multipart):

curl -X POST -F "key=YOUR_API_KEY" -F "method=post" -F "[email protected]" http://127.0.0.1:8080/in.php

Kirim CAPTCHA (dienkode base64):

curl -X POST -d "key=YOUR_API_KEY&method=base64&body=BASE64_IMAGE_DATA" http://127.0.0.1:8080/in.php

Setelah mengirim permintaan, jika semuanya benar, CapSkip akan mengembalikan ID CAPTCHA sebagai teks biasa: OK|12345

Jika json=1 digunakan, respons akan dikembalikan dalam format JSON:

{
"status":1,
"request":"12345"
}

Tunggu 1 detik, lalu kirim permintaan HTTP GET ke endpoint hasil (/res.php) dengan ID CAPTCHA yang dikembalikan.

Jika CAPTCHA sudah terpecahkan, CapSkip akan mengembalikan hasilnya sebagai teks biasa: OK|TEXT

Jika json=1 ditentukan, responsnya akan berupa:

{
"status":1,
"request":"TEXT"
}

Jika CAPTCHA belum terpecahkan, CapSkip akan mengembalikan: CAPCHA_NOT_READY

Dalam kasus ini, tunggu 1 detik dan ulangi permintaan sampai hasil akhir diterima. Jika CapSkip mengembalikan body respons yang kosong, hasilnya sudah pernah diambil atau ID tersebut tidak ada. Setiap hasil hanya dapat dibaca satu kali.

Daftar parameter permintaan GET
Parameter GETTipeWajibDeskripsi
keyStringYa Kunci API CapSkip Anda.
actionStringYa get – ambil jawaban untuk CAPTCHA yang dikirimkan.
idIntegerYa ID CAPTCHA yang dikembalikan oleh in.php.
jsonInteger
Default: 0
Tidak 0 – respons dikembalikan sebagai teks biasa
1 – respons dikembalikan dalam format JSON
curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=CAPTCHA_ID"

recaptcha v2 solver  reCAPTCHA V2

reCAPTCHA v2, yang juga dikenal sebagai reCAPTCHA “I’m not a robot”, adalah tipe CAPTCHA yang banyak digunakan dan tampak seperti berikut:
recaptcha v2

Untuk memecahkan reCAPTCHA v2, kirim googlekey dan pageurl parameter bersama dengan method=userrecaptcha dan kunci API CapSkip Anda.

Anda bisa mendapatkan googlekey menggunakan salah satu metode berikut:

Klik kanan pada widget reCAPTCHA dan pilih Periksa. Temukan URL yang diawali dengan:

www.google.com/recaptcha/api2/anchor

Salin nilai dari k parameter dari URL tersebut. Sebagai alternatif, temukan data-sitekey atribut di kode sumber halaman dan salin nilainya.

CapSkip sitekey

Setelah Anda memiliki site key, kirim permintaan HTTP GET atau POST ke http://127.0.0.1:PORT/in.php

Daftar Parameter Permintaan POST
ParameterTipeWajibDeskripsi
keyStringYa Kunci API CapSkip Anda.
methodStringYa userrecaptcha – menentukan permintaan reCAPTCHA v2.
googlekeyStringYa Nilai dari k atau data-sitekey parameter yang ditemukan di halaman target.
pageurlStringYa URL lengkap halaman tempat reCAPTCHA berada.
enterpriseInteger
Default: 0
Tidak 1 – menandakan reCAPTCHA Enterprise v2.
0 – reCAPTCHA v2 standar.
invisibleInteger
Default: 0
Tidak 1 – menandakan Invisible reCAPTCHA.
0 – reCAPTCHA checkbox standar.
data-sStringTidak Nilai dari data-s yang ditemukan pada halaman. Berlaku untuk Google Search dan layanan Google tertentu.
jsonInteger
Default: 0
Tidak 0 – respons dikembalikan sebagai teks biasa.
1 – respons dikembalikan dalam format JSON.
proxyStringTidakAlamat proxy. Format untuk autentikasi IP: IP:PORT (contoh: 123.123.123.123:3128). Format untuk autentikasi login/kata sandi: login:password@IP:PORT
proxytypeStringTidakJenis proxy. Nilai yang didukung: HTTP, HTTPS, SOCKS5, SOCKS5H. Default: HTTP ketika proxy disediakan tetapi proxytype dihilangkan.

Kirim reCAPTCHA v2 (Standard):

curl -X POST -d "key=YOUR_API_KEY&method=userrecaptcha&googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&pageurl=https://example.com" http://127.0.0.1:8080/in.php

Kirim reCAPTCHA v2 (Invisible):

curl -X POST -d "key=YOUR_API_KEY&method=userrecaptcha&googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&pageurl=https://example.com&invisible=1" http://127.0.0.1:8080/in.php

Kirim Enterprise reCAPTCHA v2:

curl -X POST -d "key=YOUR_API_KEY&method=userrecaptcha&googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&pageurl=https://example.com&enterprise=1" http://127.0.0.1:8080/in.php

Kirim Enterprise reCAPTCHA v2 (Invisible):

curl -X POST -d "key=YOUR_API_KEY&method=userrecaptcha&googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&pageurl=https://example.com&enterprise=1&invisible=1" http://127.0.0.1:8080/in.php

Jika permintaan berhasil, CapSkip akan mengembalikan ID CAPTCHA sebagai teks biasa: OK|12345

Jika json=1 digunakan, respons akan dikembalikan dalam format JSON:

{
"status":1,
"request":"12345"
}

Jika permintaan gagal, CapSkip akan mengembalikan kode error.

Tunggu 15 hingga 20 detik, lalu kirim permintaan HTTP GET ke endpoint hasil untuk mengambil solusinya: http://127.0.0.1:PORT/res.php

Daftar parameter permintaan GET
Parameter GETTipeWajibDeskripsi
keyStringYa Kunci API CapSkip Anda.
actionStringYa get – ambil jawaban untuk CAPTCHA yang dikirimkan.
idIntegerYa ID CAPTCHA yang dikembalikan oleh in.php.
jsonInteger
Default: 0
Tidak 0 – respons dikembalikan sebagai teks biasa
1 – respons dikembalikan dalam format JSON
curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=CAPTCHA_ID"

Jika CAPTCHA telah dipecahkan, CapSkip akan merespons dalam teks biasa atau JSON dan mengembalikan token jawabannya. Token-nya akan terlihat seperti berikut:

03AHJ_Vuve5Asa4koK3KSMyUkCq0vUFCR5Im4CwB7PzO3dCxIo11i53epEraq-uBO5mVm2XRikL8iKOWr0aG50sCuej9bXx5qcviUGSm4iK4NC_Q88flavWhaTXSh0VxoihBwBjXxwXuJZ-WGN5Sy4dtUl2wbpMqAj8Zwup1vyCaQJWFvRjYGWJ_TQBKTXNB5CCOgncqLetmJ6B6Cos7qoQyaB8ZzBOTGf5KSP6e-K9niYs772f53Oof6aJeSUDNjiKG9gN3FTrdwKwdnAwEYX-F37sI_vLB1Zs8NQo0PObHYy0b0sf7WSLkzzcIgW9GR0FwcCCm1P8lB-50GQHPEBJUHNnhJyDzwRoRAkVzrf7UkV8wKCdTwrrWqiYDgbrzURfHc2ESsp020MicJTasSiXmNRgryt-gf50q5BMkiRH7osm4DoUgsjc_XyQiEmQmxl5sqZP7aKsaE-EM00x59XsPzD3m3YI6SRCFRUevSyumBd7KmXE8VuzIO9lgnnbka4-eZynZa6vbB9cO3QjLH0xSG3-egcplD1uLGh79wC34RF49Ui3eHwua4S9XHpH6YBe7gXzz6_mv-o-fxrOuphwfrtwvvi2FGfpTexWvxhqWICMFTTjFBCEGEgj7_IFWEKirXW2RTZCVF0Gid7EtIsoEeZkPbrcUISGmgtiJkJ_KojuKwImF0G0CsTlxYTOU2sPsd5o1JDt65wGniQR2IZufnPbbK76Yh_KI2DY4cUxMfcb2fAXcFMc9dcpHg6f9wBXhUtFYTu6pi5LhhGuhpkiGcv6vWYNxMrpWJW_pV7q8mPilwkAP-zw5MJxkgijl2wDMpM-UUQ_k37FVtf-ndbQAIPG7S469doZMmb5IZYgvcB4ojqCW3Vz6Q

Jika CAPTCHA belum terpecahkan, CapSkip akan mengembalikan CAPCHA_NOT_READY. Dalam kasus ini, tunggu 5 detik dan ulangi permintaan. Jika CapSkip mengembalikan body respons yang kosong, hasilnya sudah pernah diambil atau ID tersebut tidak ada. Setiap hasil hanya dapat dibaca satu kali.

Temukan elemen dengan ID g-recaptcha-response dan buat terlihat dengan menghapus display: none gaya.

g recaptcha response CapSkip

Harap diperhatikan: Dalam beberapa kasus, konten halaman dihasilkan secara dinamis, dan g-recaptcha-response element may not appear in the static HTML source. In such situations, inspect the page structure using your browser’s developer tools to locate the dynamically generated element.


Sebagai alternatif, Anda dapat menggunakan JavaScript untuk mengatur nilai dari g-recaptcha-response kolom secara langsung:

document.getElementById("g-recaptcha-response").innerHTML="TOKEN";

Sebuah kolom input akan muncul di halaman. Tempelkan token jawaban ke kolom itu lalu kirim formulirnya.

recaptcha v2 solver  reCAPTCHA V2 Callback

Dalam beberapa kasus, tidak ada tombol kirim dan sebagai gantinya digunakan fungsi callback. Fungsi callback dijalankan otomatis saat reCAPTCHA dipecahkan.

Daftar parameter permintaan POST dan GET tersedia di sini: Parameter permintaan POST dan GET reCAPTCHA V2

Fungsi callback biasanya didefinisikan di dalam data-callback atribut dari widget reCAPTCHA, misalnya:

data-callback="myCallbackFunction"

Dalam kasus lain, fungsi callback didefinisikan sebagai callback parameter dari grecaptcha.render() fungsi, misalnya:

grecaptcha.render('example', {
'sitekey' : 'someSitekey',
'callback' : myCallbackFunction,
'theme' : 'dark'
});

Cara lain untuk menemukan fungsi callback adalah membuka konsol JavaScript browser dan memeriksa objek konfigurasi reCAPTCHA:

___grecaptcha_cfg.clients[0].aa.l.callback

Perhatikan bahwa aa.l properti dapat bervariasi, dan mungkin ada beberapa client reCAPTCHA di halaman. Dalam kasus seperti itu, Anda juga harus memeriksa clients[1], clients[2], dan entri lain untuk menemukan objek konfigurasi yang benar.

Sebagai alternatif, Anda dapat menggunakan skrip berikut untuk mengekstrak parameter reCAPTCHA secara otomatis:

function findRecaptchaClients() {
if (typeof (___grecaptcha_cfg) !== 'undefined') {
return Object.entries(___grecaptcha_cfg.clients).map(([cid, client]) => {
const data = { id: cid, version: cid >= 10000 ? 'V3' : 'V2' };
const objects = Object.entries(client).filter(([_, value]) => value && typeof value === 'object');objects.forEach(([toplevelKey, toplevel]) => {
const found = Object.entries(toplevel).find(([_, value]) => (
value && typeof value === 'object' && 'sitekey' in value && 'size' in value
));
if (typeof toplevel === 'object' && toplevel instanceof HTMLElement && toplevel['tagName'] === 'DIV'){
data.pageurl = toplevel.baseURI;
}
if (found) {
const [sublevelKey, sublevel] = found;data.sitekey = sublevel.sitekey;
const callbackKey = data.version === 'V2' ? 'callback' : 'promise-callback';
const callback = sublevel[callbackKey];
if (!callback) {
data.callback = null;
data.function = null;
} else {
data.function = callback;
const keys = [cid, toplevelKey, sublevelKey, callbackKey].map((key) => `['${key}']`).join('');
data.callback = `___grecaptcha_cfg.clients${keys}`;
}
}
});
return data;
});
}
return [];
}

Terakhir, panggil fungsi callback:

myCallbackFunction();

Atau sebagai alternatif:

___grecaptcha_cfg.clients[0].aa.l.callback();

Dalam beberapa kasus, fungsi callback memerlukan sebuah argumen. Pada sebagian besar situasi, Anda harus meneruskan token hasil pemecahan sebagai argumen itu. Contohnya:

myCallbackFunction('TOKEN');

recaptcha v2 solver  reCAPTCHA V2 Invisible

reCAPTCHA v2 juga memiliki mode Invisible. Anda dapat melihat contohnya di sini:

https://www.google.com/recaptcha/api2/demo?invisible=true

Invisible reCAPTCHA tidak menampilkan kotak centang “I’m not a robot”. Sebaliknya, ia biasanya dilekatkan pada sebuah tombol atau dipicu secara otomatis saat halaman dimuat atau saat pengguna berinteraksi, misalnya mengklik tombol atau mengirimkan formulir.

Secara internal, widget Invisible reCAPTCHA dirender di dalam elemen <div> tersembunyi yang diposisikan di luar viewport yang terlihat, sehingga tidak tampak oleh pengguna.

Tergantung cookie dan skor risiko pengguna, reCAPTCHA bisa lolos otomatis tanpa menampilkan tantangan. Jika tidak, tantangan gambar standar akan muncul.

Pada sebagian besar kasus, setelah tantangan selesai, sebuah fungsi callback dijalankan. Lihat bagian callback di atas untuk detail lebih lanjut.

Daftar parameter permintaan POST dan GET tersedia di sini: Parameter permintaan POST dan GET reCAPTCHA V2

Cara Menentukan Apakah reCAPTCHA Bersifat Invisible?

Anda dapat mengenali Invisible reCAPTCHA melalui salah satu indikator berikut:

  • Checkbox “I’m not a robot” tidak terlihat, tetapi challenge muncul setelah interaksi pengguna.

  • URL iframe reCAPTCHA berisi parameter size=invisible.

  • Objek konfigurasi reCAPTCHA menyertakan size properti disetel ke invisible, misalnya:
    ___grecaptcha_cfg.clients[0].aa.l.size === "invisible"

Saat memecahkan Invisible reCAPTCHA melalui API, sertakan parameter: invisible=1

Bagaimana Menangani Invisible reCAPTCHA di Browser?
Metode 1: Menggunakan JavaScript

Setel nilai dari g-recaptcha-response menjadi token yang dikembalikan CapSkip:

document.getElementById("g-recaptcha-response").innerHTML="TOKEN";

Setelah menyetel token, jalankan tindakan yang biasanya terjadi setelah verifikasi berhasil.

Dalam kebanyakan kasus, ini berarti mengirim sebuah formulir. Anda perlu mengenali formulir yang tepat melalui id, name, atau atribut lain, lalu picu pengirimannya. Berikut beberapa contohnya:

document.getElementById("recaptcha-demo-form").submit(); //by id "recaptcha-demo-form"
document.getElementsByName("myFormName")[0].submit(); //by element name "myFormName"
document.getElementsByClassName("example").submit(); //by class name "example"

Dalam beberapa kasus, sebuah fungsi callback dijalankan otomatis ketika reCAPTCHA terpecahkan.

Fungsi callback biasanya didefinisikan di dalam data-callback atribut dari widget reCAPTCHA, misalnya:

data-callback="myCallbackFunction"

Dalam kasus lain, fungsi callback didefinisikan sebagai callback parameter dari grecaptcha.render() fungsi, misalnya:

grecaptcha.render('example', {
'sitekey' : 'someSitekey',
'callback' : myCallbackFunction,
'theme' : 'dark'
});

Yang perlu Anda lakukan hanyalah memanggil fungsi itu:

myCallbackFunction();
Metode 2: Mengubah HTML

Hapus <div> elemen yang berisi widget reCAPTCHA dari body halaman.

<div style="visibility: hidden; position: absolute; width:100%; top: -10000px; left: 0px; right: 0px; transition: visibility 0s linear 0.3s, opacity 0.3s linear; opacity: 0;">
<div style="width: 100%; height: 100%; position: fixed; top: 0px; left: 0px; z-index: 2000000000; background-color: #fff; opacity: 0.5;  filter: alpha(opacity=50)"></div>
<div style="margin: 0 auto; top: 0px; left: 0px; right: 0px; position: absolute; border: 1px solid #ccc; z-index: 2000000000; background-color: #fff; overflow: hidden;">
<iframe src="https://www.google.com/recaptcha/api2/bframe?hl=en&v=r20170213115309&k=6LfP0CITAAAAAHq9FOgCo7v_fb0-pmmH9VW3ziFs#zglq3yifgkmj"
title="recaptcha challenge"
style="width: 100%; height: 100%;"
scrolling="no"
name="zglq3yifgkmj"
frameborder="0"></iframe>
</div>
</div>

Hapus seluruh blok reCAPTCHA dari halaman.

<div class="">
<!-- BEGIN: ReCAPTCHA implementation example. -->
<div
id="recaptcha-demo"
class="g-recaptcha"
data-sitekey="6LfP0CITAAAAAHq9FOgCo7v_fb0-pmmH9VW3ziFs"
data-callback="onSuccess"
data-bind="recaptcha-demo-submit"
>
<div
class="grecaptcha-badge"
style="width: 256px; height: 60px; transition: right 0.3s ease 0s; position: fixed; bottom: 14px; right: -186px; box-shadow: 0px 0px 5px gray;"
>
<div class="grecaptcha-logo">
<iframe
src="https://www.google.com/recaptcha/api2/anchor?k=6LfP0CITAAAAAHq9FOgCo7v_fb0-pmmH9VW3ziFs&co=aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbTo0NDM.&hl=en&v=r20170213115309&size=invisible&cb=uror1hlow5a"
title="recaptcha widget"
scrolling="no"
name="undefined"
width="256"
height="60"
frameborder="0"
></iframe>
</div>
<div class="grecaptcha-error"></div>
<textarea
id="g-recaptcha-response"
name="g-recaptcha-response"
class="g-recaptcha-response"
style="width: 250px; height: 40px; border: 1px solid #c1c1c1; margin: 10px 25px; padding: 0px; resize: none;  display: none; "
></textarea>
</div>
</div>
<script>
var onSuccess = function (response) {
var errorDivs = document.getElementsByClassName('recaptcha-error');
if (errorDivs.length) {
errorDivs[0].className = '';
}
var errorMsgs = document.getElementsByClassName('recaptcha-error-message');
if (errorMsgs.length) {
errorMsgs[0].parentNode.removeChild(errorMsgs[0]);
}
document.getElementById('recaptcha-demo-form').submit();
};
</script>
<!-- Optional noscript fallback. --><!-- END: ReCAPTCHA implementation example. -->
</div>

Sisipkan kode berikut sebagai pengganti blok yang dihapus:

<input type="submit" /> <textarea name="g-recaptcha-response">%g-recaptcha-response%</textarea>

%g-recaptcha-response% mewakili token jawaban yang diterima dari CapSkip.

Setelah mengganti blok tersebut, tombol “Submit query” akan muncul. Klik tombol itu untuk mengirim formulir beserta g-recaptcha-response nilai dan semua data formulir lain yang diperlukan ke situs web.

recaptcha v2 solver  reCAPTCHA V3

reCAPTCHA v3 adalah mekanisme CAPTCHA modern yang dikembangkan oleh Google. Ia tidak menampilkan tantangan yang terlihat dan tidak memerlukan interaksi pengguna. Sebagai gantinya, ia memberikan skor berdasarkan kemungkinan bahwa interaksi tersebut dilakukan manusia.

Secara teknis, reCAPTCHA v3 mirip dengan reCAPTCHA v2. Situs web menerima token dari API reCAPTCHA, yang kemudian dikirim dalam permintaan POST ke server target dan diverifikasi melalui API reCAPTCHA.

Perbedaan utamanya adalah reCAPTCHA v3 tidak menampilkan tantangan yang terlihat. Sebagai gantinya, ia mengembalikan penilaian yang memperkirakan apakah pengguna adalah manusia atau bot. Penilaian ini disebut score dan berkisar dari 0.0 hingga 1.0. Skor dikirim ke situs web, yang kemudian memutuskan cara menangani permintaan berdasarkan nilai tersebut.

Ada juga parameter tambahan bernama action, yang memungkinkan situs web membedakan antara berbagai interaksi pengguna. Setelah memverifikasi token, API reCAPTCHA mengembalikan nama action yang terkait dengan permintaan tersebut.

Cara Memecahkan reCAPTCHA v3 Menggunakan CapSkip?

Pertama, pastikan situs target menggunakan reCAPTCHA v3.

Indikator reCAPTCHA v3 meliputi:

  • Tanpa CAPTCHA terlihat atau challenge gambar

  • The api.js skrip dimuat dengan render=SITEKEY parameter, misalnya:
    https://www.google.com/recaptcha/api.js?render=SITEKEY

  • The ___grecaptcha_cfg.clients array berisi entri dengan indeks numerik yang tinggi, seperti clients[100000]

Untuk memecahkan reCAPTCHA v3, identifikasi parameter berikut:

  1. sitekey
    Ini dapat ditemukan di render parameter dari api.js URL skrip. Ia juga dapat muncul di URL iframe, di dalam kode JavaScript yang memanggil grecaptcha.execute(), atau di dalam ___grecaptcha_cfg objek konfigurasi.
  2. action
    Temukan ini dengan memeriksa kode JavaScript untuk panggilan ke grecaptcha.execute(), misalnya:
    grecaptcha.execute('SITEKEY', {action: 'do_something'})
    Dalam beberapa kasus, menemukan action memerlukan pemeriksaan beberapa file JavaScript yang dimuat halaman. Jika Anda tidak dapat menentukan nilai action, Anda dapat memakai nilai bawaan "verify".
  3. pageurl
    URL lengkap halaman tempat reCAPTCHA v3 diterapkan.
Memahami Skor

Ambang skor yang dapat diterima berbeda-beda di tiap situs web dan hanya dapat ditentukan melalui pengujian. Skor berkisar dari:

  • 0.0 → kemungkinan bot

  • 1.0 → kemungkinan manusia

Sebagian besar situs web menggunakan ambang batas antara 0.3 dan 0.7, karena pengguna yang sah pun bisa mendapatkan skor lebih rendah.

Anda dapat meneruskan ambang batas yang diinginkan menggunakan min_score parameter, tetapi skor akhir selalu ditentukan oleh Google pada saat verifikasi dan tidak dapat dijamin oleh pemecah.

Daftar Parameter Permintaan POST
ParameterTipeWajibDeskripsi
keyStringYa Kunci API CapSkip Anda.
methodStringYa userrecaptcha – menentukan permintaan reCAPTCHA.
versionStringYa v3 – menunjukkan bahwa permintaan tersebut untuk reCAPTCHA v3.
googlekeyStringYa Nilai dari data-sitekey parameter yang ditemukan di halaman target.
pageurlStringYa URL lengkap halaman tempat reCAPTCHA berada.
enterpriseInteger
Default: 0
Tidak 1 – menandakan reCAPTCHA Enterprise v3.
0 – reCAPTCHA v3 standar.
actionString
Default: verify
Tidak Nilai dari action parameter yang didefinisikan di halaman.
min_scoreFloatTidak Skor minimum yang diminta untuk token. Google menetapkan skor akhir saat server Anda memverifikasi token, jadi nilai ini hanyalah petunjuk dan tidak dijamin. CapSkip mengembalikan token yang diperolehnya terlepas dari skor yang kemudian ditetapkan Google.
jsonInteger
Default: 0
Tidak 0 – respons dikembalikan sebagai teks biasa.
1 – respons dikembalikan dalam format JSON.
proxyStringTidakAlamat proxy. Format untuk autentikasi IP: IP:PORT (contoh: 123.123.123.123:3128). Format untuk autentikasi login/kata sandi: login:password@IP:PORT
proxytypeStringTidakJenis proxy. Nilai yang didukung: HTTP, HTTPS, SOCKS5, SOCKS5H. Default: HTTP ketika proxy disediakan tetapi proxytype dihilangkan.

Kirim reCAPTCHA v3:

curl -X POST -d "key=YOUR_API_KEY&method=userrecaptcha&version=v3&action=submit&min_score=0.7&googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&pageurl=https://example.com" http://127.0.0.1:8080/in.php

Kirim Enterprise reCAPTCHA v3:

curl -X POST -d "key=YOUR_API_KEY&method=userrecaptcha&version=v3&action=submit&min_score=0.7&googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&pageurl=https://example.com&enterprise=1" http://127.0.0.1:8080/in.php

Jika permintaan berhasil, CapSkip akan mengembalikan ID CAPTCHA sebagai teks biasa: OK|12345

Jika json=1 ditetapkan, respons akan dikembalikan dalam format JSON:

{
"status":1,
"request":"12345"
}

Jika terjadi kesalahan, CapSkip akan mengembalikan kode error.

Tunggu 10 hingga 15 detik, lalu kirim permintaan HTTP GET ke endpoint hasil: http://127.0.0.1:PORT/res.php

Sertakan ID CAPTCHA yang dikembalikan dalam permintaan Anda. Daftar lengkap parameter yang tersedia ditampilkan pada tabel di bawah ini.

Jika CAPTCHA berhasil dipecahkan, CapSkip akan mengembalikan hasilnya dalam format teks biasa atau JSON. Nilai yang dikembalikan adalah token verifikasi seperti berikut:

03AHJ_Vuve5Asa4koK3KSMyUkCq0vUFCR5Im4CwB7PzO3dCxIo11i53epEraq-uBO5mVm2XRikL8iKOWr0aG50sCuej9bXx5qcviUGSm4iK4NC_Q88flavWhaTXSh0VxoihBwBjXxwXuJZ-WGN5Sy4dtUl2wbpMqAj8Zwup1vyCaQJWFvRjYGWJ_TQBKTXNB5CCOgncqLetmJ6B6Cos7qoQyaB8ZzBOTGf5KSP6e-K9niYs772f53Oof6aJeSUDNjiKG9gN3FTrdwKwdnAwEYX-F37sI_vLB1Zs8NQo0PObHYy0b0sf7WSLkzzcIgW9GR0FwcCCm1P8lB--gf50q5BMkiRH7osm4DoUgsjc_XyQiEmQmxl5sqZP7aKsaE-EM00x59XsPzD3m3YI6SRCFRUevSyumBd7KmXE8VuzIO9lgnnbka4-eZynZa6vbB9cO3QjLH0xSG3--o-fxrOuphwfrtwvvi2FGfpTexWvxhqWICMFTTjFBCEGEgj7_IFWEKirXW2RTZCVF0Gid7EtIsoEeZkPbrcUISGmgtiJkJ_KojuKwImF0G0CsTlxYTOU2sPsd5o1JDt65wGniQR2IZufnPbbK76Yh_KI2DY4cUxMfcb2fAXcFMc9dcpHg6f9wBXhUtFYTu6pi5LhhGuhpkiGcv6vWYNxMrpWJW_pV7q8mPilwkAP-zw5MJxkgijl2wDMpM-UUQ_k37FVtf-ndbQAIPG7S469doZMmb5IZYgvcB4ojqCW3Vz6Q

Jika CAPTCHA belum terpecahkan, CapSkip akan mengembalikan CAPCHA_NOT_READY. Tunggu 5 detik dan ulangi permintaan. Jika CapSkip mengembalikan body respons yang kosong, hasilnya sudah pernah diambil atau ID tersebut tidak ada. Setiap hasil hanya dapat dibaca satu kali.

Daftar parameter permintaan GET
Parameter GETTipeWajibDeskripsi
keyStringYa Kunci API CapSkip Anda.
actionStringYa get – ambil jawaban untuk CAPTCHA yang dikirimkan.
idIntegerYa ID CAPTCHA yang dikembalikan oleh in.php.
jsonInteger
Default: 0
Tidak 0 – respons dikembalikan sebagai teks biasa
1 – respons dikembalikan dalam format JSON
curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=CAPTCHA_ID"

Setelah menerima token dari CapSkip, Anda harus mengirimkannya dengan benar ke situs web target. Cara terbaik untuk memahami cara kerjanya adalah dengan mengamati permintaan yang dikirim saat menyelesaikan verifikasi sebagai pengguna biasa. Sebagian besar browser menyediakan alat pengembang dengan Network tab yang memungkinkan Anda memeriksa permintaan keluar.

Dalam kebanyakan kasus, token dikirim melalui permintaan POST. Nama parameternya mungkin g-recaptcha-response, mirip dengan reCAPTCHA v2, atau sesuatu seperti g-recaptcha-response-100000. Dalam beberapa implementasi, nama parameter yang berbeda mungkin digunakan.

Anda perlu memeriksa permintaan jaringan untuk menentukan bagaimana token dikirimkan lalu menyusun permintaan Anda sesuai dengan itu.

recaptcha v2 solver  reCAPTCHA Enterprise

reCAPTCHA Enterprise adalah versi lanjutan dari sistem reCAPTCHA Google. Ia dapat beroperasi dalam mode v2 maupun v3 dan memberi administrator situs web kendali tambahan, termasuk kemampuan menilai dan melaporkan apakah suatu interaksi dilakukan manusia atau otomatis.

Cara Memecahkan reCAPTCHA Enterprise?

Langkah pertama adalah menentukan apakah situs tersebut menggunakan reCAPTCHA versi Enterprise.

Indikator utama reCAPTCHA Enterprise meliputi:

  • Halaman dimuat enterprise.js alih-alih api.js, misalnya:

    <script src="https://recaptcha.net/recaptcha/enterprise.js" async defer></script>

  • Kode JavaScript situs memanggil grecaptcha.enterprise.METHOD alih-alih grecaptcha.METHOD

Berikutnya, tentukan implementasi mana yang digunakan: v2, Invisible v2, atau v3. Hal ini biasanya dapat dikenali dengan menganalisis bagaimana widget dirender dan bagaimana perilakunya di halaman.

Ikuti diagram alur di bawah ini untuk menentukan implementasi yang tepat. Ini berlaku pada sebagian besar kasus.

recaptcha enterprise

Identifikasi parameter CAPTCHA dengan cara yang sama seperti dijelaskan untuk reCAPTCHA v2 atau v3.

Untuk implementasi v2 Enterprise, mungkin ada data opsional tambahan. Pada sebagian besar kasus, ini berupa string kustom yang didefinisikan di s atau data-s parameter. Jika ada, sertakan nilai ini dalam permintaan Anda menggunakan data-s parameter.

Daftar parameter permintaan POST dan GET tersedia di sini: Parameter permintaan POST dan GET reCAPTCHA V2

Untuk implementasi v3 Enterprise, Anda mungkin juga memerlukan action nilai. Untuk menemukannya, periksa kode JavaScript situs dan cari grecaptcha.enterprise.execute() panggilan. action biasanya diteruskan di dalam fungsi ini. Perlu diingat bahwa action bersifat opsional dan bisa jadi undefined dalam beberapa kasus.

Daftar parameter permintaan POST dan GET tersedia di sini: Parameter permintaan POST dan GET reCAPTCHA V3

Saat mengirim permintaan Anda ke /in.php endpoint, sertakan parameter tambahan: enterprise=1

Setelah itu, berinteraksilah dengan API CapSkip dengan cara yang sama seperti saat memecahkan reCAPTCHA v2 atau v3. Setelah token dikembalikan, kirimkan token tersebut ke situs web target sesuai implementasinya.

Cloudflare turnstile solving Cloudflare Turnstile

Cloudflare Turnstile adalah alternatif CAPTCHA modern yang dikembangkan oleh Cloudflare. Ia memverifikasi apakah seorang pengunjung adalah manusia tanpa mengandalkan tantangan visual tradisional. Turnstile dapat muncul sebagai widget mandiri atau sebagai bagian dari halaman tantangan, dan ia beroperasi dengan interaksi pengguna yang minimal atau tanpa interaksi sama sekali.

Ada dua implementasi Turnstile yang umum:

1. Widget Turnstile Mandiri

Widget Turnstile mandiri disematkan langsung pada halaman situs web, biasanya untuk melindungi formulir dari pengiriman otomatis. Dalam kasus ini:

  • Ekstrak sitekey from the page.

  • Kirim ke CapSkip API bersama dengan seluruh pageurl.

  • Setelah menerima token, masukkan ke dalam cf-turnstile-response kolom.

  • Dalam beberapa implementasi, token mungkin juga perlu ditempatkan di g-recaptcha-response kolom.

  • Jika callback didefinisikan di turnstile.render() konfigurasi, jalankan dengan token yang dikembalikan.

Lalu kirim formulir seperti biasa.

2. Turnstile pada Halaman Challenge Cloudflare

Ini terjadi ketika situs web diproksikan melalui Cloudflare dan menampilkan halaman tantangan Turnstile sebelum memberikan akses. Dalam kasus ini, Anda harus mengekstrak parameter berikut:

  • cData

  • chlPageData

  • action

Nilai-nilai ini harus disertakan dalam permintaan API Anda. Selain itu, Anda harus menggunakan User-Agent nilai yang dikembalikan oleh CapSkip API saat mengirimkan token.

Cara Mengekstrak Parameter yang Diperlukan?

Untuk mengekstrak parameter yang diperlukan, Anda dapat menimpa turnstile.render metode itu dan mencegat argumen yang diteruskan saat metode tersebut dipanggil. Misalnya, suntikkan kode JavaScript berikut ke halaman. Skrip harus dieksekusi sebelum widget Turnstile dimuat agar parameternya berhasil ditangkap.

const i = setInterval(()=>{
if (window.turnstile) {
clearInterval(i)
window.turnstile.render = (a,b) => {
let p = {
method: "turnstile",
key: "YOUR_API_KEY",
sitekey: b.sitekey,
pageurl: window.location.href,
data: b.cData,
pagedata: b.chlPageData,
action: b.action,
userAgent: navigator.userAgent,
json: 1
}
console.log(JSON.stringify(p))
window.tsCallback = b.callback
return 'foo'
}
}
},50)
Daftar Parameter Permintaan POST
ParameterTipeWajibDeskripsi
keyStringYa Kunci API CapSkip Anda.
methodStringYa turnstile – menentukan permintaan Cloudflare Turnstile.
sitekeyStringYa Nilai dari data-sitekey parameter yang ditemukan di halaman target.
pageurlStringYa URL lengkap halaman tempat challenge Turnstile berada.
actionStringTidak Nilai action opsional yang didefinisikan di data-action atribut atau diteruskan ke turnstile.render().
dataStringTidak Nilai dari cData yang diteruskan ke turnstile.render() atau didefinisikan di data-cdata atribut.
pagedataStringTidak Nilai dari chlPageData yang diteruskan ke turnstile.render().
jsonInteger
Default: 0
Tidak 0 – respons dikembalikan sebagai teks biasa.
1 – respons dikembalikan dalam format JSON.
proxyStringTidakAlamat proxy. Format untuk autentikasi IP: IP:PORT (contoh: 123.123.123.123:3128). Format untuk autentikasi login/kata sandi: login:password@IP:PORT
proxytypeStringTidakJenis proxy. Nilai yang didukung: HTTP, HTTPS, SOCKS5, SOCKS5H. Default: HTTP ketika proxy disediakan tetapi proxytype dihilangkan.

Kirim Turnstile (mandiri):

curl -X POST -d "key=YOUR_API_KEY&method=turnstile&sitekey=0x4AAAAAAABUYP0XeMJF0xoy&pageurl=https://example.com" http://127.0.0.1:8080/in.php

Kirim Turnstile (challenge – action, data, pagedata opsional):

curl -X POST -d "key=YOUR_API_KEY&method=turnstile&sitekey=0x4AAAAAAABUYP0XeMJF0xoy&pageurl=https://example.com&action=managed&data=...&pagedata=..." http://127.0.0.1:8080/in.php

Jika permintaan berhasil, CapSkip akan mengembalikan ID CAPTCHA sebagai teks biasa: OK|12345

Jika json=1 ditetapkan, respons akan dikembalikan dalam format JSON:

{
"status":1,
"request":"12345"
}

Jika terjadi kesalahan, CapSkip akan mengembalikan kode error.

Gunakan ID yang dikembalikan untuk mengambil hasilnya dari /res.php endpoint dari API.

Daftar parameter permintaan GET
Parameter GETTipeWajibDeskripsi
keyStringYa Kunci API CapSkip Anda.
actionStringYa get – ambil jawaban untuk CAPTCHA yang dikirimkan.
idIntegerYa ID CAPTCHA yang dikembalikan oleh in.php.
jsonInteger
Default: 0
Tidak 0 - respons dikembalikan sebagai teks biasa.
1 - respons dikembalikan dalam format JSON, termasuk userAgent nilai.

Untuk Cloudflare Turnstile, pemecah menggunakan User-Agent browser tertentu, dan Anda harus mengirim User-Agent yang sama saat mengirim token. Dengan json=1 responsnya menyertakan userAgent kolom. Dalam mode teks biasa, baca nilai yang sama dari X-Turnstile-User-Agent header respons.

curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=CAPTCHA_ID"

geetest v3 GeeTest v3

GeeTest v3 Slider adalah CAPTCHA interaktif yang dikembangkan oleh GeeTest. CAPTCHA ini memverifikasi pengguna melalui tantangan penggeser untuk membedakan manusia dari bot sekaligus memberikan pengalaman verifikasi yang cepat dan mulus.

Untuk memecahkan CAPTCHA GeeTest v3 dengan CapSkip, Anda harus terlebih dahulu memperoleh parameter CAPTCHA yang diperlukan dari situs web target. Parameter yang diperlukan adalah:

  • gt: Kunci publik situs web (statis)
  • challenge: Nilai challenge dinamis
  • api_server: domain server API GeeTest (opsional)

Nilai-nilai ini biasanya tersedia ketika situs menginisialisasi GeeTest.

Penting: Baru challenge harus diperoleh untuk setiap permintaan pemecahan. Setelah CAPTCHA dimuat di halaman, nilai sebelumnya challenge menjadi tidak valid. Anda perlu memeriksa permintaan jaringan situs web tersebut untuk mengidentifikasi permintaan yang menghasilkan challenge dan lakukan permintaan itu sebelum mengirim setiap permintaan pemecahan ke CapSkip.

Daftar Parameter Permintaan POST
ParameterTipeWajibDeskripsi
keyStringYa*Kunci API CapSkip Anda. Diperlukan hanya jika Validasi Kunci API diaktifkan.
methodStringYaHarus geetest. Menentukan bahwa Anda mengirimkan CAPTCHA GeeTest v3.
gtStringYaThe gt nilai yang diperoleh dari situs target.
challengeStringYaThe challenge yang diperoleh dari situs target. Nilai baru harus diperoleh untuk setiap permintaan pemecahan.
pageurlStringYaURL lengkap halaman yang berisi CAPTCHA GeeTest.
api_serverStringTidakDomain server API GeeTest yang digunakan oleh situs target (misalnya api.geetest.com atau api-na.geetest.com).
jsonInteger
Default: 0
Tidak0 mengembalikan respons sebagai teks biasa. 1 mengembalikan respons sebagai JSON.
proxyStringTidakAlamat proxy. Format untuk autentikasi IP: IP:PORT (contoh: 123.123.123.123:3128). Format untuk autentikasi login/kata sandi: login:password@IP:PORT.
proxytypeStringTidakJenis proxy. Nilai yang didukung: HTTP, HTTPS, SOCKS5, SOCKS5H. Default: HTTP ketika proxy disediakan tetapi proxytype dihilangkan.

Kirim permintaan HTTP GET atau POST ke endpoint CapSkip API Anda (/in.php) dengan method=geetest. Sertakan parameter GeeTest yang diperlukan dari langkah sebelumnya beserta URL lengkap halaman yang memuat CAPTCHA.

curl -X POST \
-d "key=YOUR_API_KEY" \
-d "method=geetest" \
-d "gt=f1ab2cdefa3456789012345b6c78d90e" \
-d "challenge=12345678abc90123d45678ef90123a456b" \
-d "pageurl=https://www.example.com/" \
-d "api_server=api-na.geetest.com" \
http://127.0.0.1:8080/in.php

Jika semuanya berhasil, CapSkip akan mengembalikan ID CAPTCHA sebagai teks biasa: OK|212

Jika json=1 ditetapkan, respons akan dikembalikan dalam format JSON:

{
"status": 1,
"request": "212"
}

Jika tidak, CapSkip akan mengembalikan kode error yang sesuai.

Tunggu sekitar 5 detik, lalu kirim permintaan HTTP GET ke res.php endpoint untuk mengambil hasilnya.

Daftar parameter permintaan GET
ParameterTipeWajibDeskripsi
keyStringYa*Kunci API CapSkip Anda. Diperlukan hanya jika Validasi Kunci API diaktifkan.
actionStringYaTentukan get untuk mengambil solusi CAPTCHA.
idIntegerYaID CAPTCHA yang dikembalikan oleh in.php permintaan.
jsonInteger
Default: 0
Tidak0 mengembalikan respons sebagai teks biasa. 1 mengembalikan respons sebagai JSON.
curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=212&json=1"

Jika CAPTCHA berhasil dipecahkan, CapSkip akan mengembalikan solusinya dalam format JSON:

{
"status": 1,
"request": "{\"geetest_challenge\":\"1a2b3456cd67890e12345fab678901c2de\",\"geetest_validate\":\"09fe8d7c6ba54f32e1dcb0a9fedc8765\",\"geetest_seccode\":\"12fe3d4c56789ba01f2e345d6789c012|jordan\"}"
}

Jika CAPTCHA belum terpecahkan, CapSkip akan mengembalikan: CAPCHA_NOT_READY

Tunggu 5 detik dan ulangi permintaan. Jika terjadi kesalahan, CapSkip akan mengembalikan kode error yang sesuai. Gunakan nilai yang dikembalikan CapSkip saat mengirimkan permintaan Anda ke situs web target menggunakan kolom berikut:

  • geetest_challenge
  • geetest_validate
  • geetest_seccode

Menggunakan Proxy

Untuk reCAPTCHA v2, v3, Invisible, Enterprise, dan Cloudflare, Anda dapat mengirimkan proxy bersama setiap tugas. CapSkip akan memecahkan CAPTCHA melalui proxy tersebut alih-alih menggunakan kumpulan proxy yang dikonfigurasi di aplikasi CapSkip.

Ini berguna ketika situs web target memeriksa bahwa token CAPTCHA dihasilkan dari alamat IP yang sama dengan permintaan Anda sendiri, misalnya situs di balik Cloudflare, penilaian reCAPTCHA yang ketat, atau halaman yang dibatasi secara geografis.

Daftar Parameter Permintaan POST
ParameterTipeWajibDeskripsi
proxyStringTidakAlamat proxy. Format untuk autentikasi IP: IP:PORT (contoh: 123.123.123.123:3128). Format untuk autentikasi login/kata sandi: login:password@IP:PORT
proxytypeStringTidakJenis proxy. Nilai yang didukung: HTTP, HTTPS, SOCKS5, SOCKS5H. Default: HTTP ketika proxy disediakan tetapi proxytype dihilangkan.

Kode Kesalahan

KodeArti
ERROR_KEY_DOES_NOT_EXISTKunci API tidak valid.
ERROR_WRONG_USER_KEYKunci API tidak ada atau kosong.
ERROR_WRONG_METHODMetode HTTP tidak valid atau action parameter.
ERROR_WRONG_ID_FORMATFormat ID captcha tidak valid.
ERROR_BAD_PARAMETERSParameter wajib hilang atau tidak valid.
ERROR_UPLOADTidak ada data gambar yang diberikan atau unggahan gagal.
ERROR_INVALID_IMAGEFormat gambar tidak valid atau data gambar rusak.
ERROR_INVALID_BASE64Pengodean base64 tidak valid.
ERROR_TOO_BIG_CAPTCHA_FILESIZEUkuran gambar melebihi 600 kB atau dimensinya melebihi 1000px.
ERROR_CAPTCHA_UNSOLVABLEGagal memecahkan captcha. Kirim tugas baru dan coba lagi.
ERROR_GOOGLEKEYTidak valid googlekey parameter.
ERROR_PAGEURLTidak valid pageurl parameter.
CAPCHA_NOT_READYCaptcha masih diproses. Lanjutkan polling.
(respons kosong)Hasilnya sudah diambil, atau ID tersebut tidak ada.