Django görünümünde solvethree'yi kullanın
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.
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.whlkomutunu kullanın. - 2.
Sunucu ortam değişkenlerini ayarlayın
SOLVETHREE_API_KEYdeğerini çalışma alanınızın API anahtarına,CAPTCHA_SITEdeğerini tam URL yerine hedef ana makine adına,SOLVETHREE_PROXYdeğ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.
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
# 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.
Mevcut URLconf'u güncelleyin
django.urlsmodülündenpathöğesini, uygulamanızın görünümler modülünden decreate_captchaveget_captchaöğelerini içe aktarın. Örneğin alt kısmında gösterilen iki rota girdisini mevcuturlpatternslistesine ekleyin. Bir uygulama URLconf'u kullanıyorsanız proje URLconf'unun bunu içerdiğinden emin olun. - 2.
Geliştirme sunucusunu başlatın
Ortam değişkenleri sürecin erişimine açıkken
manage.pydosyasını içeren dizindenpython manage.py runserverkomutunu çalıştırın. Uç noktaları çağırmadan önce projenizin mevcut oturum açma akışını kullanın. - 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.
POST göndermeden önce bir kimlik kaydedin
Her mantıksal görev için yeni bir
X-Request-IDseç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örevinrequestIddeğeri olarak iletir. - 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;
idvestatusalanları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.
Görev tamamlanana kadar almaya devam edin
Döndürülen görev kimliğiyle GET uç noktasını çağırın.
pendingveyasolvingdurumunda devam edin.readydurumunda çözümü kullanın.faileddurumunda sorgulamayı durdurun veerrorCodeileerroralanlarını inceleyin; başarısız çözümlerin ücretleri iade edilir. Geçersiz girdileri değiştirmeden yeniden denemek yerine düzeltin. - 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-IDve 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.
Kaynaklar ve API referansı
İlk görevinizi çalıştırın.
$5 çalışma alanı kredisiyle başlayın.