Cara Memperbaiki ERROR_KEY_DOES_NOT_EXIST dan Wrong User Key

Jawaban singkat: ERROR_KEY_DOES_NOT_EXIST berarti kunci API dalam permintaan Anda bukan kunci yang dikenali pemecah. Tidak ada yang salah dengan CAPTCHA, sitekey, atau URL halamannya. Permintaan itu bahkan tidak pernah sampai ke tahap dipecahkan. Panduan ini membahas tiga hal yang benar-benar menyebabkannya, perbaikannya di keempat SDK, dan mengapa Anda terkadang mendapat ERROR_WRONG_USER_KEY sebagai gantinya.
Apa arti ERROR_KEY_DOES_NOT_EXIST
Ini kembali dari /in.php, pada saat pengiriman, sebelum pemecahan apa pun dimulai. API membandingkan key dalam permintaan Anda dengan kunci yang dikonfigurasi untuk diterima, dan tidak menemukan kecocokan.
# Submitting with a key the app does not know: curl "http://127.0.0.1:8080/in.php?key=WRONG&method=userrecaptcha&googlekey=YOUR_SITEKEY&pageurl=https://example.com" ERROR_KEY_DOES_NOT_EXIST
Karena ia dikembalikan pada saat pengiriman, Anda tidak pernah mendapat captcha ID, sehingga tidak ada yang bisa di-polling di /res.php. Jika kode Anda terus berulang dan menunggu, ia menunggu ID yang tidak pernah diterbitkan.
Satu hal yang membingungkan orang yang datang dari layanan hosted: CapSkip adalah API yang kompatibel dengan 2captcha dan berjalan di komputer Anda sendiri, jadi kuncinya bukan kredensial akun dan tidak terkait dengan saldo. Ini adalah pemeriksaan akses lokal pada server API. Hal itu mengubah arti dari “kunci salah” itu sendiri, dan itulah sebabnya perbaikan di bawah ini singkat.
Pertama, periksa apakah validasi kunci memang aktif
CapSkip hadir dengan validasi key yang bersifat opsional. Saat dimatikan, string apa pun yang tidak kosong akan bekerja dan Anda tidak akan pernah melihat error ini. Saat dinyalakan, key harus cocok persis.
Buka aplikasi CapSkip, masuk ke Settings, dan lihat bagian server API. Dua hal penting di sana: apakah validasi kunci diaktifkan, dan string kunci yang persis jika memang aktif. Salin kunci dari layar itu alih-alih mengetiknya ulang. Sebagian besar laporan tentang ERROR_KEY_DOES_NOT_EXIST berakhir di sini.
Selagi Anda berada di Settings, periksa juga port-nya. Port yang salah menghasilkan error koneksi, bukan error yang ini, tetapi ada baiknya memeriksa keduanya sekaligus. panduan penyiapan membahas seluruh layar tersebut.
Meneruskan kunci dengan benar di setiap SDK
Keempat SDK menggunakan nama opsi yang sama, dan keempatnya membaca variabel lingkungan yang sama, CAPSKIP_API_KEY. Setel secara eksplisit saat Anda melakukan debugging agar tidak ada keraguan tentang apa yang dikirim.
# pip install capskip
from capskip import CapSkip
# apiKey defaults to "capskip", which only works when
# key validation is turned off in the app.
solver = CapSkip(
apiKey="YOUR_API_KEY",
host="127.0.0.1",
port=8080,
)// npm install capskip
const { CapSkip } = require('capskip');
const solver = new CapSkip({
apiKey: 'YOUR_API_KEY',
host: '127.0.0.1',
port: 8080,
});// composer require capskip/capskip
use CapSkip\CapSkip;
$solver = new CapSkip([
'apiKey' => 'YOUR_API_KEY',
'host' => '127.0.0.1',
'port' => 8080,
]);// dotnet add package CapSkip
using CapSkip;
var solver = new CapSkipClient(
apiKey: "YOUR_API_KEY",
host: "127.0.0.1",
port: 8080);Signature lengkap setiap metode ada di halaman SDK pemecahan CAPTCHA halaman.
Tiga penyebab yang layak diperiksa
1. Kunci tidak pernah meninggalkan kode Anda
Anda menyetel CAPSKIP_API_KEY dalam .env file, tetapi tidak ada yang memuat .env saat runtime. Atau Anda meng-export-nya di satu shell lalu menjalankan skripnya di shell lain. SDK jatuh ke nilai bawaannya, nilai bawaan itu bukan key Anda, dan Anda mendapat error tersebut.
Cetak apa yang akan Anda kirim. Satu baris, dan pertanyaannya terjawab:
import os
# Never print the whole key in a shared log.
key = os.environ.get("CAPSKIP_API_KEY", "<unset>")
print(len(key), repr(key[:4]))Mencetak panjangnya menangkap kasus yang disembunyikan nilai bertopeng: key yang ada tetapi kosong, atau yang membawa newline di akhir dari cat key.txt.
2. Kuncinya benar tetapi rusak di dalam URL
Ini hanya menimpa orang yang memanggil API mentah. Jika key Anda mengandung karakter yang punya makna dalam query string, karakter itu harus di-percent-encode. Sebuah + menjadi spasi, sedangkan & mengakhiri parameter lebih awal, dan # memotong semua yang ada setelahnya.
# Wrong: curl sends this raw and the key gets cut at the & curl "http://127.0.0.1:8080/in.php?key=ab&cd&method=userrecaptcha" # Right: let curl encode the parameter for you curl -G http://127.0.0.1:8080/in.php \ --data-urlencode "key=ab&cd" \ --data-urlencode "method=userrecaptcha"
Atau kirim parameter sebagai body formulir lewat POST, yang menghindari seluruh kelas masalah ini. MDN punya referensi singkat tentang pengodean persen jika Anda ingin daftar karakternya secara persis. SDK melakukan encoding untuk Anda, jadi penyebab ini hilang begitu Anda beralih ke SDK.
3. Anda mengubah kuncinya dan sesuatu masih memegang kunci yang lama
Sebuah worker yang berjalan lama, kontainer Docker yang dibangun dengan kuncinya tertanam di dalam, sebuah secret CI, ekstensi browser yang dikonfigurasi terpisah. Aplikasi memiliki kunci baru, satu pemanggil masih memakai yang lama, dan hanya pemanggil itu yang gagal. Jika sebagian permintaan Anda berhasil dan sebagian lagi tidak, hampir selalu inilah penyebabnya.
ERROR_KEY_DOES_NOT_EXIST vs ERROR_WRONG_USER_KEY
Dua string error, satu keluarga yang sama. Perlakukan keduanya sebagai satu masalah dengan dua bentuk.
| Kesalahan | Apa yang ditunjuknya | Hal pertama yang harus diperiksa |
|---|---|---|
ERROR_KEY_DOES_NOT_EXIST | Kunci terbaca dan tidak cocok dengan kunci mana pun yang dikenal | String kunci itu sendiri, disalin dari Settings |
ERROR_WRONG_USER_KEY | Validasi kunci aktif dan kunci yang dikirim salah | Apakah validasi memang aktif, lalu string |
Di SDK, keduanya muncul sebagai ApiException, jadi tangkap satu tipe itu dan baca pesannya alih-alih bercabang berdasarkan stringnya.
from capskip import CapSkip, ApiException, NetworkException
solver = CapSkip(apiKey="YOUR_API_KEY")
try:
result = solver.recaptcha(
sitekey="YOUR_SITEKEY",
url="https://example.com/page-with-recaptcha",
)
except ApiException as e:
# Key problems land here, with the raw code in the message.
print("api rejected the request:", e)
except NetworkException as e:
# The app is not running, or the port is wrong.
print("cannot reach capskip:", e)Kode error di sekitarnya
Jika key-nya sudah benar, beberapa kegagalan berikutnya saat pengiriman terlihat serupa tetapi artinya sama sekali berbeda.
| Kode | Penyebab | Perbaiki |
|---|---|---|
ERROR_WRONG_METHOD | The method parameter hilang atau salah eja | Gunakan userrecaptcha, turnstile, geetest, post atau base64 |
ERROR_BAD_PARAMETERS | Parameter wajib untuk metode tersebut tidak ada | Periksa daftar parameter metode tersebut sebelum mengirim ulang |
ERROR_GOOGLEKEY | sitekey ditolak | Baca ulang dari halaman langsung, bukan dari sumber yang di-cache |
ERROR_PAGEURL | URL halaman hilang atau formatnya salah | Kirim URL lengkap termasuk skemanya |
| Connection refused | Aplikasi tidak berjalan atau portnya berbeda | Jalankan CapSkip, pastikan API server aktif |
Setiap kode yang dapat dikembalikan API tercantum di dokumentasi API.
Pertanyaan yang sering diajukan
Apakah saya benar-benar butuh kunci API?
Hanya jika validasi key diaktifkan di aplikasi. Jika dimatikan, string apa pun yang tidak kosong akan diterima dan nilai bawaan SDK berupa capskip berfungsi dengan baik. Kuncinya adalah pemeriksaan akses lokal, bukan sebuah akun.
Bisakah ERROR_KEY_DOES_NOT_EXIST berarti kredit saya habis?
Tidak. Tidak ada saldo yang bisa habis. Pemecahan terjadi di komputer Anda sendiri, jadi error key selalu berarti ketidakcocokan antara apa yang Anda kirim dan apa yang diharapkan aplikasi.
Apakah kunci juga disertakan dalam permintaan polling?
Ya. /res.php menerima key parameter yang sama dengan /in.php. Jika Anda hanya memperbaiki panggilan pengiriman, polling masih bisa gagal pada nilai yang lama.
Mengapa kunci 2captcha lama saya tidak berfungsi di sini?
Karena key itu diterbitkan oleh layanan mereka dan tidak berarti apa-apa bagi pemecah yang berjalan di komputer Anda. Bentuk API-nya sama, kredensialnya tidak. Arahkan client Anda ke 127.0.0.1 dan gunakan kunci dari CapSkip Settings.
Ringkasan
Periksa apakah validasi kunci aktif, salin kunci dari Settings alih-alih mengetiknya ulang, pastikan nilainya benar-benar sampai ke proses Anda, dan enkode dengan benar jika Anda menyusun URL secara manual. Itu praktis mencakup setiap kemunculan error_key_does_not_exist.
Seluruh kelas masalah ini mengecil ketika solver-nya adalah pemecah captcha lokal yang Anda kendalikan: tidak ada akun, tidak ada saldo, tidak ada kredensial yang berotasi, dan satu key yang bisa Anda baca langsung di layar di depan Anda.
