Assistance/Guides proxy
Guides proxy

Proxy Flowsery Analytics avec Flask

Faites transiter Flowsery Analytics via votre application Flask afin d'eviter les interferences des bloqueurs de publicites et de capturer des donnees visiteurs plus precises.

1. Installer les dependances

Terminal
pip install flask requests

2. Mettre en place le proxy

Ajoutez les routes et la fonction utilitaire suivantes a votre application Flask :

Python
from flask import Flask, request, Response
import requests
 
app = Flask(__name__)
 
 
def get_client_ip():
    """
    Determine the actual visitor IP address.
    When behind Cloudflare, prefer CF-Connecting-IP. Then X-Real-IP.
    Then X-Forwarded-For's first entry. Finally fall back to request.remote_addr.
    """
    cf_ip = request.headers.get("CF-Connecting-IP")
    if cf_ip:
        return cf_ip
    real_ip = request.headers.get("X-Real-IP")
    if real_ip:
        return real_ip
    xff = request.headers.get("X-Forwarded-For")
    if xff:
        # Comma-separated list: "client, proxy1, proxy2"
        parts = [ip.strip() for ip in xff.split(",")]
        if parts:
            return parts[0]  # the leftmost entry is the original client
    return request.remote_addr
 
 
@app.route("/js/main.js")
def proxy_script():
    response = requests.get("https://cdn.flowsery.com/main.js")
    return Response(
        response.content,
        content_type="application/javascript",
        headers={"Cache-Control": "public, max-age=31536000"},
    )
 
 
@app.route("/api/track", methods=["POST"])
def proxy_events():
    # Copy incoming headers but omit those that should match the target
    excluded = {"host", "content-length"}
    headers = {
        key: value
        for key, value in request.headers.items()
        if key.lower() not in excluded
    }
 
    # The Origin header is required by the Flowsery Analytics API
    if "Origin" not in headers:
        scheme = request.scheme
        host = request.host
        headers["Origin"] = f"{scheme}://{host}"
 
    # Attach the real visitor IP for accurate geolocation
    client_ip = get_client_ip()
    headers["x-forwarded-for"] = client_ip
    if client_ip:
        # CRITICAL: Flowsery reads this as the authoritative visitor IP. Without it, every visitor resolves to your server's region.
        headers["x-flowsery-real-ip"] = client_ip
 
    # Forward the request body and headers to Flowsery Analytics
    response = requests.post(
        "https://analytics.flowsery.com/analytics/events",
        data=request.get_data(),
        headers=headers,
        timeout=5,
    )
 
    # Return the upstream response to the browser
    return Response(
        response.content,
        status=response.status_code,
        content_type=response.headers.get("Content-Type", "application/json"),
    )

Remarque : si votre application possede deja un endpoint /api/track, utilisez l'attribut data-api sur la balise script Flowsery Analytics pour envoyer les evenements vers un autre chemin. Par exemple, data-api="/flowsery-events" redirige les donnees vers /flowsery-events.

Important : si tous les visiteurs apparaissent au meme endroit dans votre tableau de bord, verifiez que l'en-tete x-flowsery-real-ip est bien defini sur la vraie IP du visiteur (et non celle du serveur proxy) lors du transfert des requetes vers le endpoint /events de Flowsery Analytics.

3. Modifier la balise script

Remplacez le snippet Flowsery Analytics par la version proxifiee :

HTML
<script defer data-fl-website-id="flid_******" src="/js/main.js"></script>

4. Deployer

Apres le deploiement de votre serveur, la configuration proxy s'active automatiquement.

Verifier que cela fonctionne

Pour valider le bon fonctionnement du proxy :

  1. Ouvrez votre site web
  2. Ouvrez les outils de developpement de votre navigateur et passez a l'onglet Reseau
  3. Verifiez que les requetes analytics sont servies depuis votre domaine plutot que depuis analytics.flowsery.com

Depannage

Tous les visiteurs apparaissent au meme endroit

Lorsque tous les visiteurs affichent une seule localisation geographique (generalement la region de votre serveur), le proxy ne transmet pas correctement les vraies IP des visiteurs.

Resolution :

  1. Assurez-vous que votre proxy inclut l'en-tete x-flowsery-real-ip contenant la vraie adresse IP du visiteur (et non celle du serveur) lors du transfert des requetes vers le endpoint /events de Flowsery Analytics
  2. Si Flask est derriere un autre proxy (Cloudflare, Vercel, etc.), request.remote_addr sera l'IP du proxy amont : lisez directement request.headers.get('CF-Connecting-IP') ou request.headers.get('X-Real-IP')