Laravel से CAPTCHA API को कॉल करें

solvethree द्वारापढ़ने में 4 मिनट

solvethree टास्क बनाने के लिए Laravel का HTTP क्लाइंट इस्तेमाल करें, फिर उस टास्क को उसके ID से प्राप्त करें। API कुंजी और प्रॉक्सी क्रेडेंशियल सर्वर पर रखें। सफल HTTP रिस्पॉन्स पर्याप्त नहीं है: समाधान इस्तेमाल करने से पहले टास्क की स्थिति पढ़ें।

इस पेज पर

साइट और सर्वर क्रेडेंशियल कॉन्फ़िगर करें

  1. 1.

    साइट प्रोफ़ाइल सक्रिय करें

    कंसोल में लक्षित होस्टनाम सेट करें ताकि आपके वर्कस्पेस में सक्रिय reCAPTCHA प्रोफ़ाइल हो। टास्क में होस्टनाम भेजने से प्रोफ़ाइल नहीं बनती। साइट प्रोफ़ाइल सेटअप देखें।

  2. 2.

    सर्वर कॉन्फ़िगरेशन जोड़ें

    config/services.php के मौजूदा ऐरे में उदाहरण की solvethree एंट्री जोड़ें। अपने सर्वर एनवायरनमेंट में SOLVETHREE_API_KEY, CAPTCHA_SITE और SOLVETHREE_PROXY सेट करें। इन मानों को ब्राउज़र कोड से बाहर रखें; CAPTCHA_SITE होस्टनाम है, पूरा URL नहीं।

  3. 3.

    ऐक्शन को लक्ष्य से मिलाएँ

    उदाहरण login भेजता है। इसे अपने इच्छित लक्षित अनुरोध में इस्तेमाल होने वाले ऐक्शन से बदलें। यह एक proxy देता है; साथ में proxyCandidates न भेजें।

बनाने और प्राप्त करने की अलग-अलग मेथड वाली सर्विस बनाएँ

Laravel सेवा · प्रमाणीकरण के साथ HTTP से बनाना और प्राप्त करना
<?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 वर्कस्पेस कुंजी को Bearer प्रमाणीकरण के रूप में भेजता है। POST बॉडी फ़्लैट है: site, action, proxy और requestId शीर्ष-स्तरीय फ़ील्ड हैं। reCAPTCHA के लिए type या url फ़ील्ड न जोड़ें। recaptchaType छोड़ने पर दस्तावेज़ में दिया गया डिफ़ॉल्ट enterprise-v3 चुना जाता है।

दोनों मेथड json() से पहले throw() कॉल करती हैं। Laravel का HTTP क्लाइंट डिफ़ॉल्ट रूप से असफल HTTP रिस्पॉन्स पर एक्सेप्शन नहीं फेंकता, इसलिए यह कॉल करने वाले को HTTP त्रुटि पेलोड को सफल टास्क रिस्पॉन्स मानने से रोकता है। सर्विस कनेक्शन और अनुरोध के टाइमआउट सेट करती है और जानबूझकर POST को अपने-आप दोबारा भेजने की सुविधा नहीं रखती।

टास्क ID सहेजें और उसकी स्थिति जाँचें

  1. 1.

    हर लॉजिकल समाधान के लिए एक बार टास्क बनाएँ

    अपने प्रमाणित कंट्रोलर या जॉब से create कॉल करने से पहले कॉल करने वाले द्वारा जनरेट किया गया requestId सहेजें। इसमें 1–64 ASCII अक्षर, अंक, अंडरस्कोर या हाइफ़न होने चाहिए। लौटाया गया टास्क ID अलग से सहेजें: लॉजिकल अनुरोध ID टास्क बनाने के अनुरोध की रिकवरी के लिए है; retrieve टास्क ID स्वीकार करता है।

  2. 2.

    मौजूदा टास्क प्राप्त करें

    सहेजे गए टास्क ID के साथ retrieve कॉल करें। यदि स्थिति pending या solving है, तो कंट्रोलर में लगातार लूप चलाने के बजाय बाद में दोबारा प्राप्त करने की व्यवस्था करें। कॉल करने वाले के लिए प्रतीक्षा की कुल समय-सीमा तय करें; सर्विस का HTTP टाइमआउट हर अनुरोध को सीमित करता है, समाधान प्रक्रिया के जीवनकाल को नहीं। उस समय-सीमा तक पहुँचना नया टास्क बनाने का कारण नहीं है।

  3. 3.

    अंतिम परिणाम संभालें

    failed पर प्राप्त करना रोकें और errorCode तथा error जाँचें; असफल समाधानों की राशि वापस कर दी जाती है। ready पर लौटाया गया समाधान टोकन इस्तेमाल करें। इसे लौटाई गई userAgent और secChUa पहचान तथा समाधान के लिए इस्तेमाल की गई उसी प्रॉक्सी के साथ सबमिट करें। तैयार समाधान को अब भी लक्ष्य द्वारा स्वीकार किया जाना ज़रूरी है।

HTTP त्रुटियों को टास्क की विफलताओं से अलग रखें। असफल HTTP रिस्पॉन्स throw() द्वारा संभाला जाता है; failed वाले सफल रिस्पॉन्स को टास्क के स्तर पर संभालना होगा। अमान्य इनपुट को बिना बदले दोबारा न भेजें और यह न मानें कि हर विफलता का अर्थ अपर्याप्त क्रेडिट है। API त्रुटियाँ संभालना देखें।

दूसरा समाधान खरीदे बिना टाइमआउट हुए टास्क निर्माण की रिकवरी करें

कनेक्शन टाइमआउट से यह पता नहीं चलता कि solvethree ने टास्क बनाया था या नहीं। यदि आपके पास उसका टास्क ID पहले से है, तो उसे प्राप्त करें। अन्यथा मौजूदा टास्क की रिकवरी के लिए उसी requestId और बिल्कुल उन्हीं टास्क इनपुट के साथ टास्क बनाने का अनुरोध दोहराएँ।

अपना पहला टास्क चलाएँ।

$5 वर्कस्पेस क्रेडिट के साथ शुरुआत करें।

वर्कस्पेस बनाएँ
Laravel से CAPTCHA API को कॉल करें · solvethree