Laravel'den CAPTCHA API'sini çağırın
Bir solvethree görevi oluşturmak için Laravel'in HTTP istemcisini kullanın, ardından görevi kimliğiyle alın. API anahtarını ve proxy kimlik bilgilerini sunucuda tutun. Başarılı bir HTTP yanıtı yeterli değildir: çözümü kullanmadan önce görev durumunu okuyun.
Bu sayfada
Siteyi ve sunucu kimlik bilgilerini yapılandırın
- 1.
Site profilini etkinleştirin
Çalışma alanınızda etkin bir reCAPTCHA profili bulunması için konsolda hedef ana makine adını yapılandırın. Görevde bir ana makine adı göndermek profil oluşturmaz. Site profili kurulumuna bakın.
- 2.
Sunucu yapılandırmasını ekleyin
Örnekteki
solvethreegirdisiniconfig/services.phpiçindeki mevcut diziye ekleyin. Sunucu ortamınızdaSOLVETHREE_API_KEY,CAPTCHA_SITEveSOLVETHREE_PROXYdeğerlerini ayarlayın. Bu değerleri tarayıcı koduna koymayın;CAPTCHA_SITEtam URL değil, ana makine adıdır. - 3.
Hedef eylemle eşleştirin
Örnek
logingönderir. Bunu hedeflediğiniz isteğin kullandığı eylemle değiştirin. Tek birproxysağlar; ayrıcaproxyCandidatesgöndermeyin.
Ayrı oluşturma ve alma metotları olan bir servis oluşturun
<?php
// app/Services/CaptchaApi.php — configure services.solvethree in config/services.php.
namespace App\Services;
use Illuminate\Support\Facades\Http;
use InvalidArgumentException;
final class CaptchaApi
{
private function client()
{
return Http::baseUrl('https://api.solvethree.com/v1')
->withToken(config('services.solvethree.key'))
->acceptJson()->asJson()->connectTimeout(10)->timeout(25);
}
public function create(string $requestId): array
{
if (!preg_match('/^[A-Za-z0-9_-]{1,64}$/', $requestId)) {
throw new InvalidArgumentException('Invalid logical request ID');
}
// The caller keeps this requestId; do not generate another on a timeout.
return $this->client()->post('/tasks?waitMs=0', [
'site' => config('services.solvethree.site'),
'action' => 'login',
'proxy' => config('services.solvethree.proxy'),
'requestId' => $requestId,
])->throw()->json();
}
public function retrieve(string $taskId): array
{
if (!preg_match('/^[A-Za-z0-9_-]{1,128}$/', $taskId)) {
throw new InvalidArgumentException('Invalid task ID');
}
return $this->client()->get('/tasks/'.rawurlencode($taskId), ['waitMs' => 15000])
->throw()->json();
}
}
// config/services.php entry:
// 'solvethree' => ['key' => env('SOLVETHREE_API_KEY'),
// 'site' => env('CAPTCHA_SITE'), 'proxy' => env('SOLVETHREE_PROXY')],
// Invoke from your authenticated controller/job. Poll retrieve only while pending
// or solving; ready contains the solution, failed is terminal. Never use retry()
// on create without preserving both this ID and the exact original inputs.withToken, çalışma alanı anahtarını Bearer kimlik doğrulamasıyla gönderir. POST gövdesi düz yapıdadır: site, action, proxy ve requestId en üst düzey alanlardır. reCAPTCHA için type veya url alanı eklemeyin. recaptchaType belirtilmezse belgelenmiş varsayılan değer olan enterprise-v3 seçilir.
Her iki metot da json() öncesinde throw() çağırır. Laravel'in HTTP istemcisi varsayılan olarak başarısız HTTP yanıtlarında istisna fırlatmaz; bu nedenle bu adım, çağrıyı yapanın HTTP hata içeriğini başarılı bir görev yanıtı olarak işlemesini engeller. Servis, bağlantı ve istek zaman aşımlarını ayarlar ve bilinçli olarak otomatik POST yeniden denemesi içermez.
Görev kimliğini saklayın ve durumunu kontrol edin
- 1.
Her mantıksal çözüm işlemi için bir kez oluşturun
Kimliği doğrulanmış controller veya job içinde,
createçağrısından önce çağrıyı yapanın ürettiği birrequestIddeğerini saklayın. Bu değer 1–64 ASCII harfi, rakam, alt çizgi veya kısa çizgi içermelidir. Döndürülen görev kimliğini ayrıca kaydedin: mantıksal istek kimliği oluşturma işlemini kurtarmak içindir;retrieveise görev kimliğini kabul eder. - 2.
Mevcut görevi alın
Kaydedilen görev kimliğiyle
retrieveçağırın. Durumpendingveyasolvingise controller içinde sıkı bir döngü çalıştırmak yerine daha sonra yeniden almayı planlayın. Çağrıyı yapan için genel bir bekleme son süresi belirleyin; servisin HTTP zaman aşımı, çözümün yaşam süresini değil, her bir isteği sınırlar. Bu son süreye ulaşmak yeni bir görev oluşturmak için gerekçe değildir. - 3.
Son durumu işleyin
faileddurumunda görevi almayı durdurun veerrorCodeileerroralanlarını inceleyin; başarısız çözümlerin ücretleri iade edilir.readydurumunda döndürülen çözüm token'ını kullanın. Bunu, döndürülenuserAgentvesecChUakimliğiyle ve çözüm için kullanılan aynı proxy üzerinden gönderin. Hazır bir çözümün yine de hedef tarafından kabul edilmesi gerekir.
HTTP hatalarını görev hatalarından ayrı tutun. Başarısız bir HTTP yanıtı throw() ile ele alınır; failed içeren başarılı bir yanıt ise görev düzeyinde işlem gerektirir. Geçersiz girdileri değiştirmeden yeniden denemeyin veya her hatanın yetersiz bakiye anlamına geldiğini varsaymayın. API hata yönetimine bakın.
Başka bir çözüm satın almadan zaman aşımına uğrayan oluşturma işlemini kurtarın
Bağlantı zaman aşımı, solvethree'nin görevi oluşturup oluşturmadığını göstermez. Görev kimliği zaten elinizdeyse görevi alın. Aksi takdirde mevcut görevi kurtarmak için aynı requestId ve tamamen aynı görev girdileriyle oluşturma işlemini tekrarlayın.
Kaynaklar ve API referansı
İlk görevinizi çalıştırın.
$5 çalışma alanı kredisiyle başlayın.