ERROR_KEY_DOES_NOT_EXIST ve Wrong User Key nasıl düzeltilir

Kısa yanıt: ERROR_KEY_DOES_NOT_EXIST isteğinizdeki API anahtarının, çözücünün tanıdığı bir anahtar olmadığı anlamına gelir. CAPTCHA'da, sitekey'de veya sayfa URL'sinde bir sorun yoktur. İstek çözülme aşamasına hiç gelmemiştir. Bu rehber buna gerçekten yol açan üç durumu, dört SDK'nın hepsindeki düzeltmeyi ve bazen neden bunun yerine ERROR_WRONG_USER_KEY aldığınızı anlatıyor.
ERROR_KEY_DOES_NOT_EXIST ne anlama gelir
Bu hata /in.phpadresinden, gönderim anında, herhangi bir çözüm başlamadan önce döner. API, isteğinizdeki key parametresini kabul etmek üzere yapılandırıldığı anahtarla karşılaştırmış ve eşleşme bulamamıştır.
# 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
Gönderim anında döndüğü için hiçbir zaman bir captcha ID almazsınız, dolayısıyla /res.phpüzerinde sorgulanacak bir şey de yoktur. Kodunuz döngüde bekliyorsa, hiç verilmemiş bir ID'yi bekliyordur.
Barındırılan bir servisten gelenleri şaşırtan bir nokta: CapSkip, kendi makinenizde çalışan 2Captcha uyumlu bir APIolduğundan anahtar bir hesap kimlik bilgisi değildir ve bir bakiyeye bağlı değildir. Yalnızca API sunucusundaki yerel bir erişim kontrolüdür. Bu da “yanlış anahtar” ifadesinin ne anlama gelebileceğini değiştirir; aşağıdaki çözümlerin bu kadar kısa olmasının nedeni de budur.
Önce anahtar doğrulamasının açık olup olmadığına bakın
CapSkip'te anahtar doğrulaması isteğe bağlıdır. Kapalıyken boş olmayan her dize çalışır ve bu hatayı hiç görmezsiniz. Açıkken anahtarın birebir eşleşmesi gerekir.
CapSkip uygulamasını açın, Settings bölümüne gidin ve API server kısmına bakın. Burada iki şey önemlidir: anahtar doğrulamasının etkin olup olmadığı ve etkinse anahtarın tam metni. Anahtarı yeniden yazmak yerine bu ekrandan kopyalayın. ERROR_KEY_DOES_NOT_EXIST bildirimlerinin çoğu burada biter.
Hazır Settings ekranındayken portu da doğrulayın. Yanlış port bu hatayı değil bir bağlantı hatası verir, ama ikisini aynı anda kontrol etmeye değer. kurulum kılavuzu bu ekranın tamamını adım adım anlatıyor.
Anahtarı her SDK'da doğru şekilde geçirmek
Dört SDK da aynı seçenek adını kullanır ve hepsi aynı ortam değişkenini okur: CAPSKIP_API_KEY. Hata ayıklarken bunu açıkça ayarlayın ki gerçekte ne gönderildiği konusunda şüphe kalmasın.
# 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);Her yöntemin tam imzası için bkz. CAPTCHA çözme SDK'sı sayfası.
Kontrol etmeye değer üç neden
1. Anahtar kodunuzdan hiç çıkmadı
Değişkeni CAPSKIP_API_KEY bir .env dosyasında ayarladınız ama çalışma zamanında .env dosyasını yükleyen bir şey yok. Ya da onu bir kabukta export edip betiği başka bir kabukta çalıştırdınız. SDK varsayılan değerine döner, varsayılan değer sizin anahtarınız değildir ve hatayı alırsınız.
Göndermek üzere olduğunuz şeyi yazdırın. Tek satır, konu kapanır:
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]))Uzunluğu yazdırmak, maskelenmiş bir değerin gizlediği durumu yakalar: var olan ama boş olan bir anahtar ya da sonunda satır sonu taşıyan bir anahtar, örneğin cat key.txt.
2. Anahtar doğru ama URL içinde bozuluyor
Bu yalnızca ham API'yi çağıranları vurur. Anahtarınız sorgu dizesinde anlamı olan karakterler içeriyorsa, bunların yüzde kodlaması yapılmalıdır. Bir + boşluğa dönüşür, bir & parametreyi erken bitirir ve bir # kendisinden sonraki her şeyi keser.
# 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"
Ya da parametreleri form gövdesi olarak POST edin; bu, sorunun tamamını baştan aşar. MDN'de tam karakter listesini istiyorsanız yüzde kodlaması hakkında kısa bir referans var. SDK'lar kodlamayı sizin yerinize yapar, dolayısıyla bir SDK'ya geçtiğiniz anda bu neden ortadan kalkar.
3. Anahtarı değiştirdiniz ama bir şey hâlâ eskisini tutuyor
Uzun süre çalışan bir worker, anahtar gömülü olarak derlenmiş bir Docker konteyneri, bir CI secret'ı, ayrı yapılandırılmış bir tarayıcı uzantısı. Uygulamada yeni anahtar var, bir çağıran hâlâ eskisini tutuyor ve yalnızca o başarısız oluyor. İsteklerinizin bir kısmı çalışıp bir kısmı çalışmıyorsa neden neredeyse her zaman budur.
ERROR_KEY_DOES_NOT_EXIST vs ERROR_WRONG_USER_KEY
İki hata dizesi, aynı aile. Bunları tek bir sorunun iki biçimi olarak ele alın.
| Hata | Neyi işaret eder | Önce neye bakmalı |
|---|---|---|
ERROR_KEY_DOES_NOT_EXIST | Anahtar okundu ve bilinen bir anahtarla eşleşmedi | Settings'ten kopyalanan anahtar dizesinin kendisi |
ERROR_WRONG_USER_KEY | Anahtar doğrulaması açık ve gönderilen anahtar yanlış | Önce doğrulamanın açık olup olmadığı, sonra dize |
SDK'larda ikisi de ApiExceptionolarak ortaya çıkar; bu nedenle dizeye göre dallanmak yerine bu tek türü yakalayıp mesajı okuyun.
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)Komşu hata kodları
Anahtar sorunsuzsa, gönderim anındaki sonraki birkaç hata benzer görünür ama tamamen başka bir anlama gelir.
| Kod | Neden | Düzeltme |
|---|---|---|
ERROR_WRONG_METHOD | The method parametresi eksik veya yanlış yazılmış | Kullan userrecaptcha, turnstile, geetest, post veya base64 |
ERROR_BAD_PARAMETERS | Bu yöntem için gerekli bir parametre eksik | Yeniden göndermeden önce yöntemin parametre listesini kontrol edin |
ERROR_GOOGLEKEY | sitekey reddedildi | Onu önbelleğe alınmış kaynaktan değil, canlı sayfadan yeniden okuyun |
ERROR_PAGEURL | Sayfa URL'si eksik veya hatalı biçimlendirilmiş | Şema dâhil tam URL'yi gönderin |
| Connection refused | Uygulama çalışmıyor ya da port farklı | CapSkip'i başlatın, API server'ın açık olduğunu doğrulayın |
API'nin dönebileceği her kod şurada listelenmiştir: API dokümantasyonu.
Sık sorulan sorular
API anahtarına gerçekten ihtiyacım var mı?
Yalnızca uygulamada anahtar doğrulaması etkinse. Kapalıyken boş olmayan her dize kabul edilir ve SDK'nın varsayılanı olan capskip sorunsuz çalışır. Anahtar yerel bir erişim kontrolüdür, hesap değildir.
ERROR_KEY_DOES_NOT_EXIST kredimin bittiği anlamına gelebilir mi?
Hayır. Bitecek bir bakiye yok. Çözüm kendi makinenizde gerçekleşir, dolayısıyla bir anahtar hatası her zaman gönderdiğiniz şeyle uygulamanın beklediği şey arasındaki uyuşmazlıktır.
Anahtar sorgulama isteğine de girer mi?
Evet. /res.php de key parametresini aynı şekilde alır, tıpkı /in.phpgibi. Yalnızca gönderim çağrısını düzelttiyseniz sorgulama hâlâ eski değer yüzünden başarısız olabilir.
Eski 2Captcha anahtarım neden burada çalışmıyor?
Çünkü onların servisi tarafından verilmiştir ve sizin makinenizde çalışan bir çözücü için hiçbir anlam taşımaz. API biçimi aynıdır, kimlik bilgileri değil. İstemcinizi 127.0.0.1 adresine yönlendirin ve CapSkip Settings'teki anahtarı kullanın.
Özet
Anahtar doğrulamasının açık olup olmadığını kontrol edin, anahtarı yeniden yazmak yerine Settings'ten kopyalayın, değerin sürecinize gerçekten ulaştığını doğrulayın ve URL'yi elle kuruyorsanız düzgün kodlayın. Bu, pratikte her error_key_does_not_exist.
Çözücü, kontrolü sizde olan bir yerel captcha çözücü olduğunda bu sorun sınıfının tamamı küçülür: hesap yok, bakiye yok, dönen kimlik bilgileri yok ve önünüzdeki ekrandan okuyabileceğiniz tek bir anahtar var.
