Zum Inhalt
Myra EU CAPTCHA Online-Hilfe Stand · 25.08.2026

Python

Das Paket myra-eucaptcha prüft das Token auf dem Server. Es stellt eine synchrone und eine asynchrone Schnittstelle bereit.

Voraussetzungen

Die folgenden Voraussetzungen müssen erfüllt sein:

Voraussetzung Wert
Paketverwaltung pip oder uv
Zugangsdaten Öffentlicher Sitekey und Secret aus der Ansicht Details

Paket installieren

Installieren Sie das Paket aus PyPI:

pip install myra-eucaptcha

Mit der Paketverwaltung uv lautet der Befehl:

uv add myra-eucaptcha

Widget einbinden

Fügen Sie das Widget in das zu schützende Formular ein:

<div class="eu-captcha" data-sitekey="EUCAPTCHA_SITE_KEY"></div>

Ergänzen Sie die Seite um den Skript-Verweis:

<script src="https://cdn.eu-captcha.eu/verify.js" async defer></script>

Das Skript zeichnet das Widget, führt die Challenge aus und ergänzt das Formular um das Token.

Eine vollständige Seite sieht damit wie folgt aus:

<html>
    <head>
        <title>captcha integration sample</title>
    </head>
    <body>

    <form action="/login" method="post">
        <table>
            <tr>
                <td>user</td>
                <td>
                    <input type=text name="username" />
                </td>
            </tr>
            <tr>
                <td>pass</td>
                <td>
                    <input type=password name="password" />
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <div class="eu-captcha" data-sitekey="EUCAPTCHA_SITE_KEY"></div>
                </td>
            </tr>
            <tr><td colspan="2"><input type="submit" name="submit" /></td></tr>
        </table>
    </form>

    <script src="https://cdn.eu-captcha.eu/verify.js" async defer></script>
    </body>
</html>

Token prüfen

Das folgende Beispiel zeigt die serverseitige Prüfung mit FastAPI:

from myra_eucaptcha import MyraEuCaptchaClient, MyraEuCaptchaClientConfig

@app.post("/login", response_class=HTMLResponse)
async def login(
    request:Request,
    username: str = Form(...),
    password: str = Form(...),
    eu_captcha_response: str = Form(..., alias="eu-captcha-response"),
):

    # configure the captcha settings and behaviour
    captcha_config = MyraEuCaptchaClientConfig(
        sitekey="EUCAPTCHA_SITE_KEY",
        secret="EUCAPTCHA_SECRET_KEY",
    )

    client = MyraEuCaptchaClient(config=captcha_config)

    # this is depending on your webserver-setup and whether we're behind
    # a reverse-proxy (nginx, apache, traefik, or something similar.)
    remote_addr = request.headers.get('x-real-ip','')
    validationresult = await client.avalidate(
                token=eu_captcha_response,
                remote_addr=remote_addr)

    if validationresult.success:
        # yay - all good.
        # <your-code-here>
        pass
    else:
        # validation failed, check validationresult.errors
        # <your-code-here>
        pass

Die asynchrone Prüfung erfolgt über avalidate(), die synchrone über validate().

Woher die IP-Adresse des Besuchers stammt, hängt von Ihrem Webserver ab. Steht die Anwendung hinter einem vorgelagerten System wie nginx, Apache oder Traefik, lesen Sie die Adresse aus der entsprechenden Kopfzeile.

Verhalten bei Fehlern

In der Voreinstellung ist das Paket fehlertolerant: Bei einer Zeitüberschreitung, einem API-Fehler oder einem Netzwerkfehler liefert die Prüfung das Ergebnis True, und es wird keine Ausnahme ausgelöst. Die aufgetretenen Fehler stehen in MyraEuCaptchaResult.errors.

Sie ändern dieses Verhalten über MyraEuCaptchaClientConfig:

    captcha_config = MyraEuCaptchaClientConfig(
        sitekey="EUCAPTCHA_SITE_KEY",
        secret="EUCAPTCHA_SECRET_KEY",
        connect_timeout: int = 3
        read_timeout: int = 10
        write_timeout: int = 10
        pool_timeout: int = 3
        default_result_on_error:bool = True ## this is the validation result, that is returned on exceptions
        suppress_exceptions:bool = True     ## if you want exceptions to be raised, set this to False
    )
Einstellung Vorgabe Wirkung
connect_timeout 3 Zeitgrenze für den Verbindungsaufbau in Sekunden.
read_timeout 10 Zeitgrenze für das Lesen der Antwort in Sekunden.
write_timeout 10 Zeitgrenze für das Senden der Anfrage in Sekunden.
pool_timeout 3 Zeitgrenze für eine freie Verbindung aus dem Verbindungsspeicher in Sekunden.
default_result_on_error True Ergebnis der Prüfung, wenn eine Ausnahme auftritt.
suppress_exceptions True Auf False löst das Paket die Ausnahme aus, statt sie zu unterdrücken.

Für Django siehe Django.

Vollständiges Beispiel

Siehe Vue und Python.