# Installation d'un relais Cloudflare Worker pour la veille Re-info.fr

**Objectif** : disposer d'IPs de sortie de secours (Cloudflare) pour les requêtes de veille
(vérification de liens, récupération de titres, flux RSS) — usage légal et modéré.

**Date** : 14/08/2026

---

## 1. Principe

Un **Cloudflare Worker** est un petit script JavaScript hébergé gratuitement par Cloudflare.
Chaque Worker expose une URL publique `https://<nom>.workers.dev` qui agit comme un **proxy** :
on lui passe une URL cible en paramètre, il la récupère depuis une IP Cloudflare et renvoie le contenu.

- Gratuit : 100 000 requêtes/jour par compte
- IP de sortie : datacenters Cloudflare (Europe : Paris, Francfort, Amsterdam, Stockholm…)
- Plusieurs Workers = plusieurs IPs de sortie différentes

---

## 2. Installation côté Cloudflare (une seule fois)

### 2.1 Créer le compte
1. Aller sur https://dash.cloudflare.com
2. Créer un compte gratuit (email + mot de passe)
3. Vérifier l'email

### 2.2 Créer le premier Worker
1. Menu **Workers & Pages** → bouton **Create** → **Create Worker**
2. Nommer le Worker : `reinfo-relay-1` (ou autre)
3. Remplacer le code par défaut par le script ci-dessous
4. Cliquer **Deploy**

### 2.3 Script du Worker (proxy relais)

```js
// Relais de veille Re-info.fr — usage modéré et légal
export default {
  async fetch(request) {
    const url = new URL(request.url);
    const target = url.searchParams.get("url");

    if (!target) {
      return new Response("Paramètre 'url' manquant. Usage: ?url=https://...", { status: 400 });
    }

    // Sécurité : n'accepter que http/https
    if (!/^https?:\/\//i.test(target)) {
      return new Response("URL invalide", { status: 400 });
    }

    try {
      const response = await fetch(target, {
        headers: {
          "User-Agent": "Mozilla/5.0 (compatible; ReInfoVeille/1.0)",
          "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
          "Accept-Language": "fr-FR,fr;q=0.9,en;q=0.5"
        },
        redirect: "follow"
      });

      // Renvoyer le contenu avec le code HTTP d'origine
      return new Response(response.body, {
        status: response.status,
        headers: {
          "Content-Type": response.headers.get("Content-Type") || "text/plain",
          "X-Relay-Status": String(response.status)
        }
      });
    } catch (err) {
      return new Response("Erreur relais: " + err.message, { status: 502 });
    }
  }
};
```

### 2.4 Créer des Workers supplémentaires (IPs de secours)
Répéter l'étape 2.2 avec d'autres noms : `reinfo-relay-2`, `reinfo-relay-3`, etc.
Chaque Worker a sa propre IP de sortie Cloudflare.

---

## 3. Installation côté PC (aucune installation requise)

Le relais s'utilise avec `curl` — déjà présent sur Linux/Mac/Windows 10+.

### 3.1 Test rapide
```bash
curl -s "https://reinfo-relay-1.<votre-sous-domaine>.workers.dev/?url=https://example.com"
```

### 3.2 Usage dans la veille (remplace les appels directs)
Au lieu de :
```bash
curl -s -o /dev/null -w "%{http_code}" -L -A "Mozilla/5.0" "https://cible.com/page"
```
Utiliser :
```bash
curl -s -o /dev/null -w "%{http_code}" "https://reinfo-relay-1.<sous-domaine>.workers.dev/?url=https://cible.com/page"
```

### 3.3 Rotation entre plusieurs Workers (IPs de secours)
```bash
RELAYS=("reinfo-relay-1" "reinfo-relay-2" "reinfo-relay-3")
RELAY="${RELAYS[$((RANDOM % ${#RELAYS[@]}))]}"
curl -s "https://$RELAY.<sous-domaine>.workers.dev/?url=$TARGET"
```

### 3.4 Intégration dans les prompts de veille (AGENTS.md)
Ajouter dans `/home/alan/SITE/WEB/AGENTS.md`, section « Règles de vérification des liens » :

> **Relais Cloudflare (optionnel)** : si un site bloque l'IP locale (403/429 hors rate-limit),
> réessayer via le relais `https://reinfo-relay-1.<sous-domaine>.workers.dev/?url=<URL_ENCODED>`.
> Ne jamais utiliser le relais pour contourner un 429 (rate limit) — le lien est alors considéré valide.

---

## 4. Limites et précautions

| Point | Détail |
|-------|--------|
| Quota gratuit | 100 000 requêtes/jour par compte (largement suffisant pour la veille) |
| IP de sortie | Cloudflare choisit le datacenter (Europe pour des cibles françaises) |
| Pays non choisi | Impossible de forcer un pays précis |
| Usage légal | Respecter robots.txt et les limites des sites cibles ; usage modéré |
| Interdit | Contourner des blocages, paywalls, attaques, spam — bannissable par Cloudflare |
| Confidentialité | Cloudflare voit les requêtes transitant par le Worker |

---

## 5. Vérification

1. `curl -s "https://reinfo-relay-1.<sous-domaine>.workers.dev/?url=https://api.ipify.org"` → doit renvoyer une IP Cloudflare (104.x, 172.x, 162.158.x)
2. `curl -s "https://reinfo-relay-1.<sous-domaine>.workers.dev/?url=https://noembed.com/embed?url=<VIDEO_YT>"` → doit renvoyer le JSON du titre
3. Comparer avec l'IP locale : `curl -s https://api.ipify.org` → IP différente = relais fonctionnel
