ملاحظة مهمة: لم يعُد الإصدار 1.0 من reCAPTCHA API متاحًا. يُرجى الترقية إلى الإصدار 2.0. مزيد من المعلومات
توفّر مكتبة Java reCAPTCHA طريقة بسيطة لإجراء اختبار CAPTCHA على موقعك الإلكتروني المستند إلى Java، ما يساعدك في منع برامج التتبّع من إساءة استخدامها. تنتهي المكتبة reCAPTCHA API:
لاستخدام reCAPTCHA مع Java/JSP، يمكنك تنزيل reCAPTCHA Java المكتبة هنا (بمساهمة "سورين") وفكّ ضغطها. عادةً ما يكون الشيء الوحيد ملف jar (recaptcha4j-X.X.X.jar)، الذي يجب نسخه إلى مكان يمكن تحميله فيه باستخدام تطبيق جافا. على سبيل المثال، إذا كنت تستخدم Tomcat لتشغيل JSP، يمكنك وضع الوعاء ملف في دليل باسم WEB-INF/lib/.
البدء بسرعة
بعد الاشتراك في مفاتيح واجهة برمجة التطبيقات وتنزيل مكتبة Java لـ reCAPTCHA، إليك التعليمات الأساسية لتنفيذ ما يلي: تثبيت reCAPTCHA على موقعك الإلكتروني
من جانب العميل (كيفية إظهار صورة اختبار CAPTCHA)
إذا كنت تريد استخدام مكوّن Java الإضافي لعرض تطبيق reCAPTCHA المصغّر، يجب استيراد بفئات reCAPTCHA المناسبة. في JSP، يمكنك إجراء ذلك من خلال إدخال هذه الأسطر بالقرب من في أعلى الملف مع عنصر النموذج الذي سيتم عرض تطبيق reCAPTCHA المصغّر فيه:
<%@ page import="net.tanesha.recaptcha.ReCaptcha" %> <%@ page import="net.tanesha.recaptcha.ReCaptchaFactory" %>
بعد ذلك، ستحتاج إلى إنشاء مثيل من reCAPTCHA:
ReCaptcha c = ReCaptchaFactory.newReCaptcha("your_public_key", "your_private_key", false);
أخيرًا، يمكن الحصول على رمز HTML لعرض أداة reCAPTCHA من المصادر التالية: استدعاء الدالة:
c.createRecaptchaHtml(null, null)
لذلك، في لغة JSP قد تبدو التعليمة البرمجية كما يلي:
<%@ page import="net.tanesha.recaptcha.ReCaptcha" %> <%@ page import="net.tanesha.recaptcha.ReCaptchaFactory" %> <html> <body> <form action="" method="post"> <% ReCaptcha c = ReCaptchaFactory.newReCaptcha("your_public_key", "your_private_key", false); out.print(c.createRecaptchaHtml(null, null)); %> <input type="submit" value="submit" /> </form> </body> </html>
لا تنسَ استبدال your_public_key
وyour_private_key
بـ
قيم مفاتيح واجهة برمجة التطبيقات.
من جهة الخادم (كيفية اختبار ما إذا كان المستخدم قد أدخل الإجابة الصحيحة)
في الطلب الذي يتحقّق من صحة النموذج، عليك أولاً استيراد البيانات التالية: صفوف reCAPTCHA:
import net.tanesha.recaptcha.ReCaptchaImpl; import net.tanesha.recaptcha.ReCaptchaResponse;
بعد ذلك، يجب إدخال الرمز الذي يتحقّق من حلّ reCAPTCHA الذي أدخله المستخدم. يوضح المثال أدناه (في JSP) كيفية إجراء ذلك:
<%@ page import="net.tanesha.recaptcha.ReCaptchaImpl" %> <%@ page import="net.tanesha.recaptcha.ReCaptchaResponse" %> <html> <body> <% String remoteAddr = request.getRemoteAddr(); ReCaptchaImpl reCaptcha = new ReCaptchaImpl(); reCaptcha.setPrivateKey("your_private_key");
String challenge = request.getParameter("recaptcha_challenge_field"); String uresponse = request.getParameter("recaptcha_response_field"); ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(remoteAddr, challenge, uresponse); if (reCaptchaResponse.isValid()) { out.print("Answer was entered correctly!"); } else { out.print("Answer is wrong"); } %> </body> </html>
في الرمز البرمجي أعلاه:
remoteAddr
هو عنوان IP للمستخدم (والذي يتم تمريره إلى reCAPTCHA).
الخوادم)uresponse
على إجابة المستخدم على تحدي reCAPTCHA.هام: التخزين المؤقت لنظام أسماء النطاقات
تواجه Java مشكلة مزعجة قد تؤدي إلى الاتصال بين الخادم و reCAPTCHA كل بضعة أشهر، وستتوقف خدمة reCAPTCHA عن العمل على موقعك الإلكتروني عند ذلك ما يحدث. يُرجى الاطّلاع على المعلومات أدناه لمعرفة كيفية حلّ هذه المشكلة.
بشكل افتراضي، يقوم جهاز Java الافتراضي (JVM) بتخزين جميع عمليات بحث نظام أسماء النطاقات مؤقتًا بشكل مؤقت بدلاً من استخدام مدة البقاء (TTL) المحددة في سجل نظام أسماء النطاقات لكل مضيف. لأولئك الذين فكيف لا تعرف ذلك، فإن بحث نظام أسماء النطاقات هو طلب يتم إرساله إلى خادم DNS يحول اسم مضيف قابل للقراءة إلى عنوان IP. على سبيل المثال، يحوِّل www.recaptcha.net إلى عنوان IP 69.12.97.164. الأمر بالطبع أكثر تعقيدًا من ذلك، وإذا كنت تريد لمزيد من المعلومات، فإن إدخال ويكيبيديا على يشكّل نظام أسماء النطاقات نقطة بداية جيدة.
ويمكن لخوادم reCAPTCHA تغيير عناوين IP، ولكن ليس بشكل متكرر. نظرًا لأنّ Java تخزِّن مؤقتًا نظام أسماء النطاقات تُجري عمليات البحث بشكل دائم، فقد يؤدي هذا إلى انقطاع الاتصال بين الخادم وreCAPTCHA عند تغيير عنوان IP لخدمة reCAPTCHA. في هذه الحالة، أعِد تشغيل جهاز JVM (على سبيل المثال، إعادة التشغيل). Tomcat) يمكنه حل المشكلة لأنها تتسبب في إجراء بحث جديد في نظام أسماء النطاقات. ومع ذلك، ربما لا تحتاج إلى إعادة تشغيل JVM مرة كل بضعة أشهر كلما تعطُّل موقعك الإلكتروني بسبب reCAPTCHA تغيرت الخوادم عنوان IP.
لحلّ هذه المشكلة للأبد، يمكنك تمرير -Dsun.net.inetaddr.ttl=30 إلى app-server (يخبر ذلك Java بتخزين نظام أسماء النطاقات في ذاكرة التخزين المؤقت لمدة 30 ثانية فقط). في Tomcat لنظام التشغيل Windows، يمكن أن إنجازها من خلال
- إيقاف Tomcat
- الانتقال إلى tomcat\bin
- تشغيل Tomcat5w.exe
- الانتقال إلى علامة تبويب جافا
- إضافة خاصية جافا إلى قسم خيارات جافا: -Dsun.net.inetaddr.ttl=30
- خروج
- بدء Tomcat
في Tomcat لنظام التشغيل Linux أو MacOS X، يجب تشغيل الأمر التالي في سطر الأوامر (ثم أعد تشغيل Tomcat):
export JAVA_OPTS="$JAVA_OPTS -Dsun.net.inetaddr.ttl=30"
إليك مقالة لشرح المزيد عن هذه المشكلة.