Django görünümünde solvethree'yi kullanın

solvethree tarafından4 dk okuma

Görevi bir POST görünümünde oluşturun, kimliğini döndürün ve çağıranın durumunu almasına izin verin. Çözüm tamamlanana kadar oluşturma isteğini açık tutmayın.

Sağlanan görünümler, yapılandırılmış bir reCAPTCHA Enterprise hedefi ve tek bir proxy kullanır. Kimlik doğrulamanın ve standart CSRF ara yazılımının etkin olduğu mevcut bir Django projesinde kullanılmalıdır.

Bu sayfada

SDK'yı yükleyin ve hedefi yapılandırın

  1. 1.

    Django ortamına yükleyin

    Resmî SDK, Python 3.10+ gerektirir. Django'nun çalıştığı ortamda python -m pip install https://solvethree.com/downloads/solvethree_sdk-0.1.0-py3-none-any.whl komutunu kullanın.

  2. 2.

    Sunucu ortam değişkenlerini ayarlayın

    SOLVETHREE_API_KEY değerini çalışma alanınızın API anahtarına, CAPTCHA_SITE değerini tam URL yerine hedef ana makine adına, SOLVETHREE_PROXY değerini ise çözüm ve ardından hedefe gönderim için kullanılan proxy'ye ayarlayın. API anahtarını ve proxy kimlik bilgilerini sunucuda tutun.

  3. 3.

    Site profilini etkinleştirin

    Konsolda bu ana makine adı için çalışma alanınızın erişebileceği etkin bir profil yapılandırın. Ana makine adı ve eylem göndermek profil oluşturmaz. Site profili kurulumuna bakın.

Örnek, eylemi login olarak sabitler ve çağırandan hedef ayarları almaz. Yapılandırdığınız hedef başka bir eylem gerektiriyorsa bu eylemi değiştirin. İstek, varsayılan enterprise-v3 modunu kullanır; type veya url değil, site, action ve proxy ya da proxyCandidates alanlarından tam olarak biri gerekir.

Kimlik doğrulamalı görünümleri ekleyin

Django · normal CSRF korumasıyla kimlik doğrulamalı görünümler
# views.py in an existing Django project with authentication/CSRF configured.
import os
from django.contrib.auth.decorators import login_required
from django.http import JsonResponse
from django.views.decorators.http import require_GET, require_POST
from solvethree import Solvethree, SolvethreeError

def client():
    return Solvethree(os.environ["SOLVETHREE_API_KEY"])

@login_required
@require_POST
def create_captcha(request):
    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"]
    try:
        return JsonResponse(client().create_task(task, wait_ms=0, timeout=20))
    except ValueError:
        return JsonResponse({"error": "Invalid task input"}, status=400)
    except SolvethreeError as error:
        return JsonResponse({"requestId": error.request_id, "taskId": error.task_id}, status=502)

@login_required
@require_GET
def get_captcha(request, task_id):
    try:
        return JsonResponse(client().get_task(task_id, wait_ms=15000, timeout=25))
    except ValueError:
        return JsonResponse({"error": "Invalid task ID"}, status=400)
    except SolvethreeError as error:
        return JsonResponse({"requestId": error.request_id, "taskId": error.task_id}, status=502)

# urls.py: import these views and add to urlpatterns:
# path("captcha/tasks", create_captcha),
# path("captcha/tasks/<str:task_id>", get_captcha),

create_task, wait_ms=0 kullandığından çözümün tamamını beklemeden görevi döndürür. HTTP çağrısının zaman aşımı 20 saniyedir. Alma görünümü, 25 saniyelik HTTP zaman aşımıyla görev güncellemesi için en fazla 15 saniye bekleyebilir. Bunlar senkron SDK çağrılarıdır: alma isteği beklerken Django işçisini meşgul etmeye devam eder.

login_required, erişimi oturum açmış kullanıcılarla sınırlar; yöntem dekoratörleri oluşturma için POST, alma için GET yöntemine izin verir. Django'nun standart CSRF korumasını koruyun ve POST gönderirken CSRF token'ını ekleyin. csrf_exempt eklemeyin.

Rotaları bağlayın ve Django'yu başlatın

  1. 1.

    Mevcut URLconf'u güncelleyin

    django.urls modülünden path öğesini, uygulamanızın görünümler modülünden de create_captcha ve get_captcha öğelerini içe aktarın. Örneğin alt kısmında gösterilen iki rota girdisini mevcut urlpatterns listesine ekleyin. Bir uygulama URLconf'u kullanıyorsanız proje URLconf'unun bunu içerdiğinden emin olun.

  2. 2.

    Geliştirme sunucusunu başlatın

    Ortam değişkenleri sürecin erişimine açıkken manage.py dosyasını içeren dizinden python manage.py runserver komutunu çalıştırın. Uç noktaları çağırmadan önce projenizin mevcut oturum açma akışını kullanın.

  3. 3.

    Kayıtlı yolları kullanın

    Kapsayıcı bir URL öneki yoksa oluşturma yolu POST /captcha/tasks, alma yolu ise GET /captcha/tasks/<task_id> olur. Sağlanan rotaların sonunda eğik çizgi yoktur. Projenizin URLconf'u tarafından eklenen önekleri dahil edin.

Bir kez oluşturun, ardından görevi alın

  1. 1.

    POST göndermeden önce bir kimlik kaydedin

    Her mantıksal görev için yeni bir X-Request-ID seçin ve oluşturma işlemi kesinleşene kadar saklayın. 1–64 ASCII harf, rakam, alt çizgi veya kısa çizgi kullanın. Görünüm bu başlığı görevin requestId değeri olarak iletir.

  2. 2.

    Görev durumundan önce HTTP başarısını kontrol edin

    Örnek, yakalanan girdi doğrulama hataları için HTTP 400, yakalanan SDK hataları için 502 döndürür. Başarılı bir yanıt görev verilerini içerir; id ve status alanlarını okuyun. HTTP başarısı, isteğin başarılı olduğu anlamına gelir; token'ın hazır olduğu anlamına gelmez.

  3. 3.

    Görev tamamlanana kadar almaya devam edin

    Döndürülen görev kimliğiyle GET uç noktasını çağırın. pending veya solving durumunda devam edin. ready durumunda çözümü kullanın. failed durumunda sorgulamayı durdurun ve errorCode ile error alanlarını inceleyin; başarısız çözümlerin ücretleri iade edilir. Geçersiz girdileri değiştirmeden yeniden denemek yerine düzeltin.

  4. 4.

    Oluşturulup oluşturulmadığı belirsiz olan görevi kurtarın

    POST zaman aşımına uğrarsa veya SDK hatası döndürürse hemen yeni bir kimlikle başka bir görev oluşturmayın. Kimliği biliniyorsa mevcut görevi alın. Aksi takdirde kurtarmak için ilk X-Request-ID ve değişmemiş görev girdileriyle POST isteğini tekrarlayın. Bu kimliği farklı girdilerle yeniden kullanmak çakışmaya neden olur; yapılandırılmış ana makine adı, eylem veya proxy değişiklikleri de buna dahildir.

SDK hata yanıtı, tanılama için istisnadaki requestId ve taskId değerlerini içerir. Kurtarmanın bu yanıtın alınmasına bağlı olmaması için çağıranın ilk X-Request-ID değerini ayrıca saklayın. Hataların ele alınması için CAPTCHA API hatalarına bakın.

Token'ı aynı proxy ve döndürülen kimlikle gönderin

Yalnızca ready durumundaki bir görev kullanılabilir bir çözüm içerir. Hedefe gönderilecek değer görev kimliği değil, solution.token değeridir. Döndürülen solution.userAgent ve solution.secChUa tarayıcı kimliğini, SOLVETHREE_PROXY içinde yapılandırılan ilk proxy ile birlikte kullanın.

Bu görünümler hedefe hiçbir şey göndermez. Gönderim kodunuz bu proxy'yi korumalı ve döndürülen kimliği uygulamalıdır; token'ı ilgisiz bir tarayıcı oturumuna döndürmek bunu otomatik olarak yapmaz. Proxy kimlik bilgilerini sunucu tarafında tutun ve çözümü başka bir hedef URL veya tarayıcı kimliğiyle karıştırmayın.

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

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

Çalışma alanı oluşturun
Django görünümünde solvethree'yi kullanın · solvethree