---
url: https://docs.ogmabox.com/uk/reference/httpql.md
description: >-
  Фільтруйте історію HTTP, трафік WebSocket, результати автоматизації та
  пов’язані розділи Ogma за синтаксисом HTTPQL і StreamQL.
---

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

Ogma використовує сумісну з Caido підмножину мови запитів для фільтрації історії HTTP, трафіку WebSocket, результатів автоматизації й пов’язаних розділів.

## Синтаксис {#syntax}

Запити складаються з умов, поєднаних `AND` і `OR`.

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

Дужки групують вирази:

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

Підтримуються коментарі:

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

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

## Оператори {#operators}

| Оператор | Значення |
| --- | --- |
| `:` | Рівність або типове зіставлення залежно від типу поля |
| `.eq:` | Дорівнює |
| `.ne:` | Не дорівнює |
| `.cont:` | Містить без урахування регістру |
| `.ncont:` | Не містить без урахування регістру |
| `.cs.cont:` | Містить з урахуванням регістру |
| `.cs.ncont:` | Не містить з урахуванням регістру |
| `.like:` | Збіг за шаблоном у стилі SQL |
| `.nlike:` | Заперечення збігу за шаблоном у стилі SQL |
| `.regex:` | Збіг за регулярним виразом |
| `.nregex:` | Заперечення збігу за регулярним виразом |
| `.lt:` | Менше ніж |
| `.lte:` | Менше або дорівнює |
| `.gt:` | Більше ніж |
| `.gte:` | Більше або дорівнює |
| `.exists` | Заголовок існує; використовуйте `req.header["Name"].value.exists` або відповідник для відповіді |

## Приклади HTTP {#http-examples}

Знайти трафік API:

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

Знайти помилки сервера:

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

Знайти великі відповіді:

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

Знайти відповіді JSON:

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

Знайти запити з cookie:

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

```

Знайти трафік, змінений перехопленням або пошуком і заміною:

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

Знайти ймовірні адміністративні шляхи:

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

Знайти трафік повторного надсилання або автоматизації:

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

## Приклади потоків {#stream-examples}

StreamQL застосовує той самий стиль запитів до WebSocket і потокових подань.

Знайти повідомлення WebSocket, що містять поле токена:

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

Знайти повідомлення сервер-клієнт:

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

Знайти повідомлення, схожі на JSON:

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

## Практичні збережені фільтри {#practical-saved-filters}

| Назва | Запит |
| --- | --- |
| Помилки API | `req.path.cont:"/api/" AND resp.code.gte:400` |
| Кінцеві точки автентифікації | `req.path.cont:"login" OR req.path.cont:"oauth" OR req.path.cont:"session"` |
| Трафік JSON | `resp.header["content-type"].value.cont:"json"` |
| Цікаві методи | `req.method:POST OR req.method:PUT OR req.method:PATCH OR req.method:DELETE` |
| Потенційні секрети | `resp.body.cont:"api_key" OR resp.body.cont:"secret" OR resp.body.cont:"token"` |

## Обмеження {#limits}

Щоб фільтри залишалися передбачуваними, Ogma обмежує складність запитів:

* Максимальна глибина вкладених виразів: 16.
* Максимальна кількість умов: 64.

Якщо запит надто складний, розділіть його на збережені фільтри або використовуйте пошук для ширшого дослідження.
