Flask arka ucundan solvethree'yi çağırın

solvethree tarafından4 dk okuma

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

    Python 3.10 veya üzerini kullanın

    Flask'ı python -m pip install flask ile yükleyin. Resmi Python SDK'sını python -m pip install https://solvethree.com/downloads/solvethree_sdk-0.1.0-py3-none-any.whl ile yükleyin.

  2. 2.

    Sunucu ortam değişkenlerini ayarlayın

    SOLVETHREE_API_KEY değerini çalışma alanı API anahtarınız, INTEGRATION_KEY değerini ise yetkili çağıranınızın X-Integration-Key içinde göndereceği gizli değer olarak ayarlayın. CAPTCHA_SITE değerini tam URL değil hedef ana makine adı, SOLVETHREE_PROXY değerini ise bu görev için kullanılan HTTP veya HTTPS proxy URL'si olarak ayarlayın. Bu değerleri sunucuda tutun.

  3. 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_SITE değ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

Flask · aynı görevi oluşturma ve getirme
# 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. 1.

    Her mantıksal görev için bir istek kimliği oluşturun

    POST /captcha/tasks çağrısından önce kaydedin, ardından X-Integration-Key ile birlikte X-Request-ID olarak 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. 2.

    Döndürülen görev kimliğini saklayın

    Başarılı bir HTTP yanıtından sonra sonucun id değerini kaydedin. X-Integration-Key başlığını tekrar göndererek GET /captcha/tasks/<task_id> üzerinden görevi alın.

  3. 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-ID ve 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.

Başarılı bir HTTP yanıtından sonra görevin durumunu inceleyin.
Başarılı bir HTTP yanıtından sonra görevin durumunu inceleyin.
Görev durumuÇağıranın yapacağı işlem
beklemedeAynı görev kimliğini koruyun ve görevi tekrar alın.
çözülüyorAynı görev kimliğini koruyun ve görevi tekrar alın.
hazırSorgulamayı durdurun ve çözümü okuyun.
failedSorgulamayı 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.

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

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

Çalışma alanı oluşturun
Flask arka ucundan solvethree'yi çağırın · solvethree