Flask arka ucundan solvethree'yi çağırın
solvethree görevi oluşturmak ve almak için ayrı Flask rotaları kullanın. Aşağıdaki POST, tüm çözümü beklemeden döner; çağıran görev kimliğini saklar ve görev hazır olana veya başarısız olana kadar GET rotasını kontrol eder.
Bu sayfada
Bağımlılıkları yükleyin ve hedefi yapılandırın
- 1.
Python 3.10 veya üzerini kullanın
Flask'ı
python -m pip install flaskile yükleyin. Resmi Python SDK'sınıpython -m pip install https://solvethree.com/downloads/solvethree_sdk-0.1.0-py3-none-any.whlile yükleyin. - 2.
Sunucu ortam değişkenlerini ayarlayın
SOLVETHREE_API_KEYdeğerini çalışma alanı API anahtarınız,INTEGRATION_KEYdeğerini ise yetkili çağıranınızınX-Integration-Keyiçinde göndereceği gizli değer olarak ayarlayın.CAPTCHA_SITEdeğerini tam URL değil hedef ana makine adı,SOLVETHREE_PROXYdeğerini ise bu görev için kullanılan HTTP veya HTTPS proxy URL'si olarak ayarlayın. Bu değerleri sunucuda tutun. - 3.
Site profilini etkinleştirin
solvethree konsolunda bu ana makine adı için çalışma alanınızın erişebileceği etkin bir profil yapılandırın.
CAPTCHA_SITEdeğerini ayarlamak profil oluşturmaz. Hedef henüz yapılandırılmadıysa site profili kurulumuna bakın.
Örnek, eylemi login olarak sabitler ve varsayılan reCAPTCHA Enterprise v3 görevini kullanır. Çalıştırmadan önce bu eylemi hedef işlemle eşleşecek şekilde değiştirin. Çağıran, istek gövdesi üzerinden site, eylem veya proxy değerini geçersiz kılamaz.
Oluşturma ve alma rotalarını ekleyin
# pip install flask and the official solvethree SDK wheel.
import hmac
import os
from flask import Flask, abort, jsonify, request
from solvethree import Solvethree, SolvethreeError
app = Flask(__name__)
def client():
return Solvethree(os.environ["SOLVETHREE_API_KEY"])
@app.before_request
def authorize():
if not hmac.compare_digest(request.headers.get("x-integration-key", ""), os.environ["INTEGRATION_KEY"]):
abort(401)
@app.errorhandler(SolvethreeError)
def task_error(error):
return jsonify(requestId=error.request_id, taskId=error.task_id), 502
@app.errorhandler(ValueError)
def invalid_input(error):
return jsonify(error="Invalid task input or ID"), 400
@app.post("/captcha/tasks")
def create():
task = {"site": os.environ["CAPTCHA_SITE"], "action": "login", "proxy": os.environ["SOLVETHREE_PROXY"]}
if request.headers.get("x-request-id"):
task["requestId"] = request.headers["x-request-id"]
return jsonify(client().create_task(task, wait_ms=0, timeout=20))
@app.get("/captcha/tasks/<task_id>")
def retrieve(task_id):
return jsonify(client().get_task(task_id, wait_ms=15000, timeout=25))Örneği app.py olarak kaydedin. Ortam değişkenleri ayarlandıktan sonra python -m flask --app app run ile yerel olarak başlatın. Rotalar POST /captcha/tasks ve GET /captcha/tasks/<task_id> şeklindedir. Flask ayrı bir URLconf gerektirmez: dekoratörler her iki rotayı da kaydeder. Yerel başlatma ayrıntıları için Flask hızlı başlangıç kılavuzuna bakın; mevcut üretim WSGI yapılandırmanızı koruyun.
Oluşturma, 20 saniyelik ağ zaman aşımıyla wait_ms=0 kullanır. Bu, HTTP isteğinin kendisini değil, çözümün beklenmesini atlar. Alma, 25 saniyelik ağ zaman aşımıyla görev güncellemesi için 15 saniyeye kadar beklemeye izin verir. Her iki görünüm de senkron SDK'yı kullandığından SDK çağrısı çalışırken her biri kendisine ayrılan istek işleyicisini meşgul eder.
POST göndermeden önce istek kimliğini saklayın
- 1.
Her mantıksal görev için bir istek kimliği oluşturun
POST /captcha/tasksçağrısından önce kaydedin, ardındanX-Integration-Keyile birlikteX-Request-IDolarak gönderin. 1–64 ASCII harf, rakam, alt çizgi veya kısa çizgi kullanın. Sunucu görevi sabit yapılandırmasından oluşturduğu için bu POST isteğinde görev gövdesi gerekmez. - 2.
Döndürülen görev kimliğini saklayın
Başarılı bir HTTP yanıtından sonra sonucun
iddeğerini kaydedin.X-Integration-Keybaşlığını tekrar göndererekGET /captcha/tasks/<task_id>üzerinden görevi alın. - 3.
Başka bir görev oluşturmak yerine oluşturulup oluşturulmadığı belirsiz olan görevi kurtarın
POST bağlantısı zaman aşımına uğrarsa görev yine de oluşturulmuş olabilir. Kimliği elinizdeyse görevi alın. Aksi takdirde mevcut görevi kurtarmak için aynı
X-Request-IDve değişmemiş görev girdileriyle POST isteğini tekrarlayın. Siteyi, eylemi veya proxy'yi değiştirdikten sonra kimliği yeniden kullanmak çakışmaya neden olur.
Örnekte bu başlık isteğe bağlıdır; ancak gönderilmezse görev oluşturulduğu halde yanıtı kaybolduğunda bu kurtarma seçeneği kullanılamaz. İlk istek zaman aşımına uğradı diye yeni bir kimlik oluşturmayın.
Görev durumundan önce HTTP hatalarını ele alın
Önce Flask yanıtının HTTP durumunu kontrol edin. Örnek, eksik veya yanlış entegrasyon anahtarı için 401, yakalanan ValueError için 400 ve yakalanan SolvethreeError için 502 döndürür. Bu 502 yanıtının gövdesi, kurtarma için requestId ve taskId değerlerini sunar; görev durumu verisi değildir ve tek başına görevin başarısız olduğu anlamına gelmez.
| Görev durumu | Çağıranın yapacağı işlem |
|---|---|
| beklemede | Aynı görev kimliğini koruyun ve görevi tekrar alın. |
| çözülüyor | Aynı görev kimliğini koruyun ve görevi tekrar alın. |
| hazır | Sorgulamayı durdurun ve çözümü okuyun. |
| failed | Sorgulamayı durdurun ve errorCode ile error alanlarını inceleyin. Başarısız çözümlerin ücretleri iade edilir. |
Token'ı ilk proxy ve döndürülen kimlikle gönderin
Yalnızca ready durumundaki bir sonuç kullanılabilir bir çözüm içerir. Hedefe görev kimliğini değil, solution.token değerini gönderin ve döndürülen solution.userAgent ile solution.secChUa tarayıcı kimliğini kullanın.
Gönderimi, görevi oluşturmak için kullanılan proxy üzerinden yapın. Bu örnek tek ve sabit bir SOLVETHREE_PROXY kullanır; bu nedenle mevcut ortam değerinin daha sonra hâlâ aynı olacağını varsaymak yerine ilk proxy yapılandırmasını görevle birlikte saklayın. Flask rotaları SDK sonucunu döndürür; hedefe gönderim yapmaz veya çağıranın proxy'sini yapılandırmaz.
Token'ı, proxy'yi, tarayıcı kimliğini ve amaçlanan hedefi birlikte saklayın. Hazır bir görev, solvethree'nin bir çözüm ürettiği anlamına gelir; kabul edilip edilmediği, hedefin sonraki uygulama isteğine verdiği yanıtla belirlenir.
Kaynaklar ve API referansı
İlk görevinizi çalıştırın.
$5 çalışma alanı kredisiyle başlayın.