|
|
@@ -4563,6 +4563,29 @@ van vandaag die al begonnen zijn ten onrechte als "toekomstig" — die worden
|
|
|
namelijk correct door het `>= -2 hours`-filter weggelaten. Dat gaf een telling
|
|
|
van 10 in plaats van 7.
|
|
|
|
|
|
+**⚠️ Stuur bij élke `curl`/Python-meting tegen productie een normale User-Agent
|
|
|
+mee — `Python-urllib` wordt door Cloudflare geblokkeerd met een 403.** Gevonden
|
|
|
+2026-09-19, en het kost je een half uur verwarring want het lijkt op een
|
|
|
+kapot endpoint: alle zeven app-endpoints gaven ineens 403, terwijl `curl` op
|
|
|
+dezelfde URL gewoon 200 gaf. Gemeten per User-Agent:
|
|
|
+
|
|
|
+| User-Agent | status |
|
|
|
+|---|---|
|
|
|
+| `Python-urllib/3.11` | **403** |
|
|
|
+| `Dart/3.9 (dart:io)` (wat de app stuurt) | 200 |
|
|
|
+| `curl/8.5.0`, geen UA, een browser-UA | 200 |
|
|
|
+
|
|
|
+**De app wordt dus niet geraakt** — Dart's UA komt schoon door. In Python:
|
|
|
+```python
|
|
|
+r = urllib.request.Request(url, headers={'User-Agent': 'Dart/3.9 (dart:io)'})
|
|
|
+json.load(urllib.request.urlopen(r, timeout=90))
|
|
|
+```
|
|
|
+
|
|
|
+**Nog een reden om dit te weten:** `plaatsen.json` en de views-endpoints zitten in
|
|
|
+Cloudflare Cache Rules. Een meting met de ene UA kan een cache-entry vullen die
|
|
|
+een andere UA nooit te zien krijgt; vergelijk dus nooit twee metingen met
|
|
|
+verschillende clients zonder dat mee te wegen.
|
|
|
+
|
|
|
**Bij het testen of een views-endpoint een filter-parameter accepteert:
|
|
|
stuur altijd óók een verzonnen parameter mee als controle.** Drupal Views
|
|
|
negeert onbekende query-parameters **stil** — zonder die controle bewijst
|