---
url: https://docs.ogmabox.com/ru/reference/httpql.md
description: >-
  Фильтруйте историю HTTP, WebSocket, результаты Automate и связанные разделы
  Ogma с помощью HTTPQL и StreamQL.
---

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

Ogma использует совместимое с Caido подмножество языка запросов для истории HTTP, WebSocket, результатов Automate и связанных разделов.

## Синтаксис {#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

```

Найти трафик, изменённый Intercept или Match & Replace:

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

Найти вероятные административные пути:

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

Найти трафик Replay или Automate:

```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.

Если запрос слишком сложный, разделите его на сохранённые фильтры или используйте поиск для более широкого исследования.
