क्रेडिट खर्च किए बिना Go CAPTCHA एकीकरण का परीक्षण करें
NewClientWithBaseURL का उपयोग करके आधिकारिक Go SDK को किसी httptest सर्वर की ओर निर्देशित करें। सर्वर टास्क के रिस्पॉन्स देता है, इसलिए आप solvethree क्रेडिट खर्च किए बिना या एप्लिकेशन के सीक्रेट दिए बिना SDK को आज़मा सकते हैं।
इस पेज पर
स्थानीय फ़िक्स्चर पर SDK चलाएँ
- 1.
डिपेंडेंसी इंस्टॉल करें
Go 1.22 या उसके बाद का संस्करण उपयोग करें। अपने Go मॉड्यूल में
solvethree.com/[email protected]इंस्टॉल करने के लिएgo getका उपयोग करें। मॉड्यूल solvethree.com से उपलब्ध कराया जाता है। - 2.
टेस्ट सेव करें और चलाएँ
उदाहरण को अपने मॉड्यूल की केवल टेस्ट के लिए बनी डायरेक्टरी में
captcha_integration_test.goके नाम से सेव करें, फिर उस डायरेक्टरी सेgo testचलाएँ। फ़िक्स्चर की कुंजी, होस्टनाम और प्रॉक्सी को अपरिवर्तित रखें: ये टेस्ट डेटा हैं, न कि ऐसे क्रेडेंशियल या सेवाएँ जिन्हें आपको कॉन्फ़िगर करना है।
package integration_test
import (
"context"
"fmt"
"net/http"
"net/http/httptest"
"sync/atomic"
"testing"
"time"
solvethree "solvethree.com/sdk"
)
func TestSolve(t *testing.T) {
var posts atomic.Int32
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
if r.Method == "POST" {
posts.Add(1)
fmt.Fprint(w, `{"id":"fixture-1","status":"pending"}`)
return
}
fmt.Fprint(w, `{"id":"fixture-1","status":"ready","solution":{"token":"FIXTURE_TOKEN","userAgent":"fixture-browser-identity","secChUa":"fixture-hints"}}`)
}))
defer server.Close()
client, err := solvethree.NewClientWithBaseURL("fixture-key", server.URL, nil)
if err != nil { t.Fatal(err) }
result, err := client.Solve(context.Background(), solvethree.TaskRequest{
Site: "accounts.example.com", Action: "login", Proxy: "http://proxy.example:8080",
}, solvethree.SolveOptions{Timeout: time.Second, PollInterval: time.Millisecond})
if err != nil { t.Fatal(err) }
if result.Solution.Token != "FIXTURE_TOKEN" || posts.Load() != 1 { t.Fatal("incorrect lifecycle") }
}NewClientWithBaseURL टेस्ट के लिए लूपबैक HTTP स्वीकार करता है। यहाँ server.URL प्रोडक्शन API पते की जगह लेता है, और हैंडलर स्थानीय रूप से जवाब देता है। प्रॉक्सी मान केवल सबमिट किए गए टास्क का हिस्सा है; यह फ़िक्स्चर उससे कनेक्ट नहीं होता।
टेस्ट पास होने से क्या साबित होता है
POST रिस्पॉन्स टास्क को लंबित रखता है। बाद के अनुरोध को FIXTURE_TOKEN वाला तैयार रिस्पॉन्स मिलता है। अंतिम असर्शन लौटाए गए टोकन और ठीक एक POST, दोनों की जाँच करता है, जिससे इस फ़्लो के दौरान अनजाने में अतिरिक्त टास्क बनाए जाने का पता चलता है।
हैंडलर को जानबूझकर छोटा रखा गया है: हर गैर-POST अनुरोध को तैयार रिस्पॉन्स मिलता है। यह पोलिंग मेथड, अनुरोध पाथ या सबमिट किए गए JSON पर असर्शन नहीं करता। अनुरोध कॉन्ट्रैक्ट को भी टेस्ट करने के लिए, हैंडलर से अपेक्षित निर्माण और टास्क प्राप्ति रूट के साथ-साथ सबमिट की गई साइट, ऐक्शन और प्रॉक्सी की जाँच करवाएँ।
यह टेस्ट पास होने से साबित होता है कि सिम्युलेट किया गया SDK जीवनचक्र काम करता है। यह किसी वास्तविक साइट प्रोफ़ाइल, प्रॉक्सी या लक्ष्य द्वारा टोकन स्वीकार किए जाने की पुष्टि नहीं करता। लौटाया गया टोकन और ब्राउज़र पहचान फ़िक्स्चर के मान हैं।
जहाँ आपका इंटीग्रेशन निर्णय लेता है, वहाँ विफलता के केस जोड़ें
स्थानीय हैंडलर का विस्तार करें ताकि वह वे स्थितियाँ लौटाए जिन्हें आपके एप्लिकेशन को सँभालना है। POST काउंटर बनाए रखें: पोल का दोबारा प्रयास करने पर दूसरा टास्क नहीं बनना चाहिए।
| फ़िक्स्चर का व्यवहार | क्या जाँचें |
|---|---|
| पोलिंग अनुरोध पहले HTTP 429, 502, 503 या 504 लौटाता है, फिर तैयार स्थिति। | Solve अस्थायी पोलिंग विफलताओं पर दोबारा प्रयास करता है, समय-सीमा के भीतर Retry-After का पालन करता है, और फिर भी केवल एक POST भेजता है। |
| टास्क errorCode site-unreachable और एक त्रुटि संदेश के साथ विफल हो जाता है। | *solvethree.TaskFailedError को सँभालें और उस टास्क की पोलिंग बंद करें। इसका ErrorCode विफलता की पहचान करता है; जब आपको इसके Error टेक्स्ट की ज़रूरत हो, तो विफल टास्क प्राप्त करें। |
| निर्माण पर असफल HTTP रिस्पॉन्स मिलता है। | रिस्पॉन्स को सफल टास्क मानने के बजाय HTTP त्रुटि सँभालें। *solvethree.APIError निकालने और StatusCode जाँचने के लिए errors.As का उपयोग करें। |
| टास्क समय-सीमा तक लंबित रहता है। | errors.Is से context.DeadlineExceeded की पहचान करें। टाइमआउट प्रतीक्षा रोकता है; यह रिमोट काम रद्द नहीं करता। |
| सर्वर निर्माण रिकॉर्ड कर लेता है, लेकिन क्लाइंट को रिस्पॉन्स नहीं मिलता। | *solvethree.Error में रिकवरी की जानकारी जाँचें। CreateTask अपने-आप POST का दोबारा प्रयास नहीं करता। TaskID पता हो तो GetTask से रिकवर करें, या उसी RequestID के साथ बिल्कुल वही मूल इनपुट दोबारा भेजें। |
रिस्पॉन्स खोने वाले केस के लिए, टेस्ट को एक स्पष्ट अनुरोध ID दें और फ़िक्स्चर को ऐसा बनाएँ कि उस ID और उन्हीं इनपुट को दोबारा भेजने पर वह मौजूदा टास्क लौटाए। अन्यथा, आप दूसरे निर्माण को टेस्ट कर रहे हैं—रिकवरी को नहीं।
स्रोत और API संदर्भ
अपना पहला टास्क चलाएँ।
$5 वर्कस्पेस क्रेडिट के साथ शुरुआत करें।