Laravel'den CAPTCHA API'sini çağırın

solvethree tarafından3 dk okuma

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. 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. 2.

    Sunucu yapılandırmasını ekleyin

    Örnekteki solvethree girdisini config/services.php içindeki mevcut diziye ekleyin. Sunucu ortamınızda SOLVETHREE_API_KEY, CAPTCHA_SITE ve SOLVETHREE_PROXY değerlerini ayarlayın. Bu değerleri tarayıcı koduna koymayın; CAPTCHA_SITE tam URL değil, ana makine adıdır.

  3. 3.

    Hedef eylemle eşleştirin

    Örnek login gönderir. Bunu hedeflediğiniz isteğin kullandığı eylemle değiştirin. Tek bir proxy sağlar; ayrıca proxyCandidates göndermeyin.

Ayrı oluşturma ve alma metotları olan bir servis oluşturun

Laravel servisi · kimlik doğrulamalı HTTP oluşturma ve getirme
<?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. 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 bir requestId değ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; retrieve ise görev kimliğini kabul eder.

  2. 2.

    Mevcut görevi alın

    Kaydedilen görev kimliğiyle retrieve çağırın. Durum pending veya solving ise 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. 3.

    Son durumu işleyin

    failed durumunda görevi almayı durdurun ve errorCode ile error alanlarını inceleyin; başarısız çözümlerin ücretleri iade edilir. ready durumunda döndürülen çözüm token'ını kullanın. Bunu, döndürülen userAgent ve secChUa kimliğ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.

İlk görevinizi çalıştırın.

$5 çalışma alanı kredisiyle başlayın.

Çalışma alanı oluşturun
Laravel'den CAPTCHA API'sini çağırın · solvethree