---
url: https://docs.ogmabox.com/fr/reference/httpql.md
description: >-
  Filtrez l'historique HTTP d'Ogma, le trafic WebSocket, les résultats
  d'Automatisation et les vues associées avec la syntaxe de requête HTTPQL et
  StreamQL.
---

# HTTPQL et StreamQL {#httpql-and-streamql}

Ogma utilise un sous-ensemble d'un langage de requête compatible avec Caido pour filtrer l'historique HTTP, le trafic WebSocket, les résultats d'Automatisation et les vues associées.

## Syntaxe {#syntax}

Les requêtes sont composées de clauses reliées par `AND` et `OR`.

```text
req.host:example.com AND resp.code:200
```

Les parenthèses regroupent les expressions :

```text
(req.path.cont:"/api/" OR req.path.cont:"/graphql") AND resp.code.gte:400
```

Les commentaires sont pris en charge :

```text
// API errors
req.path.cont:"/api/" AND resp.code.gte:500
```

```text
/* focus on login */
req.path.cont:"login"
```

## Opérateurs {#operators}

| Opérateur | Signification |
| --- | --- |
| `:` | Égalité ou correspondance par défaut, selon le type du champ |
| `.eq:` | Égal à |
| `.ne:` | Différent de |
| `.cont:` | Contient, sans distinction de casse |
| `.ncont:` | Ne contient pas, sans distinction de casse |
| `.cs.cont:` | Contient, avec distinction de casse |
| `.cs.ncont:` | Ne contient pas, avec distinction de casse |
| `.like:` | Correspondance avec un motif de type SQL |
| `.nlike:` | Absence de correspondance avec un motif de type SQL |
| `.regex:` | Correspondance avec une expression régulière |
| `.nregex:` | Absence de correspondance avec une expression régulière |
| `.lt:` | Inférieur à |
| `.lte:` | Inférieur ou égal à |
| `.gt:` | Supérieur à |
| `.gte:` | Supérieur ou égal à |
| `.exists` | L'en-tête existe ; utilisez `req.header["Name"].value.exists` ou son équivalent pour la réponse |

## Exemples HTTP {#http-examples}

Trouver le trafic d'API :

```text
req.path.cont:"/api/"
```

Trouver les erreurs serveur :

```text
resp.code.gte:500
```

Trouver les réponses volumineuses :

```text
resp.len.gt:100000
```

Trouver les réponses JSON :

```text
resp.header["content-type"].value.cont:"application/json"
```

Trouver les requêtes contenant des cookies :

```text
req.header["cookie"].value.exists

```

Trouver le trafic modifié par Interception ou Rechercher et remplacer :

```text
req.modified.eq:true
```

Trouver les chemins susceptibles de mener à une interface d'administration :

```text
req.path.cont:"/admin" OR req.path.cont:"/manage"
```

Trouver le trafic de Rejeu ou d'Automatisation :

```text
source:replay OR source:automate
```

## Exemples de flux {#stream-examples}

StreamQL applique le même style de requête aux vues WebSocket et aux vues de flux.

Trouver les messages WebSocket contenant un champ de jeton :

```text
ws.raw.cont:"token"
```

Trouver les messages envoyés du serveur au client :

```text
ws.direction.eq:"To Client"
```

Trouver les messages ressemblant à du JSON :

```text
ws.raw.cont:"{" AND ws.raw.cont:"}"
```

## Filtres enregistrés utiles {#practical-saved-filters}

| Nom | Requête |
| --- | --- |
| Erreurs d'API | `req.path.cont:"/api/" AND resp.code.gte:400` |
| Points d'accès d'authentification | `req.path.cont:"login" OR req.path.cont:"oauth" OR req.path.cont:"session"` |
| Trafic JSON | `resp.header["content-type"].value.cont:"json"` |
| Méthodes intéressantes | `req.method:POST OR req.method:PUT OR req.method:PATCH OR req.method:DELETE` |
| Secrets potentiels | `resp.body.cont:"api_key" OR resp.body.cont:"secret" OR resp.body.cont:"token"` |

## Limites {#limits}

Pour conserver un comportement prévisible des filtres, Ogma limite la complexité des requêtes :

* Profondeur maximale des expressions imbriquées : 16.
* Nombre maximal de clauses : 64.

Si une requête devient trop complexe, répartissez-la entre plusieurs filtres enregistrés ou utilisez Recherche pour une investigation plus large.
