---
url: https://docs.ogmabox.com/id/reference/httpql.md
description: >-
  Filter riwayat HTTP, lalu lintas WebSocket, hasil Otomatisasi, dan tampilan
  terkait di Ogma dengan sintaks kueri HTTPQL dan StreamQL.
---

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

Ogma menggunakan subset bahasa kueri yang kompatibel dengan Caido untuk memfilter riwayat HTTP, lalu lintas WebSocket, hasil Otomatisasi, dan tampilan terkait.

## Sintaks {#syntax}

Kueri terdiri dari klausa yang dihubungkan dengan `AND` dan `OR`.

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

Tanda kurung mengelompokkan ekspresi:

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

Komentar didukung:

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

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

## Operator {#operators}

| Operator | Makna |
| --- | --- |
| `:` | Sama dengan atau pencocokan default, bergantung pada tipe kolom |
| `.eq:` | Sama dengan |
| `.ne:` | Tidak sama dengan |
| `.cont:` | Mengandung, tanpa membedakan huruf besar/kecil |
| `.ncont:` | Tidak mengandung, tanpa membedakan huruf besar/kecil |
| `.cs.cont:` | Mengandung, dengan membedakan huruf besar/kecil |
| `.cs.ncont:` | Tidak mengandung, dengan membedakan huruf besar/kecil |
| `.like:` | Pencocokan pola seperti SQL |
| `.nlike:` | Pencocokan negatif pola seperti SQL |
| `.regex:` | Pencocokan ekspresi reguler |
| `.nregex:` | Pencocokan negatif ekspresi reguler |
| `.lt:` | Lebih kecil dari |
| `.lte:` | Lebih kecil dari atau sama dengan |
| `.gt:` | Lebih besar dari |
| `.gte:` | Lebih besar dari atau sama dengan |
| `.exists` | Header ada; gunakan `req.header["Name"].value.exists` atau padanannya untuk respons |

## Contoh HTTP {#http-examples}

Temukan lalu lintas API:

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

Temukan kesalahan server:

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

Temukan respons besar:

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

Temukan respons JSON:

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

Temukan permintaan dengan cookie:

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

```

Temukan lalu lintas yang dimodifikasi oleh Intersepsi atau Cocokkan & Ganti:

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

Temukan path yang kemungkinan merupakan path admin:

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

Temukan lalu lintas kirim ulang atau otomatisasi:

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

## Contoh Stream {#stream-examples}

StreamQL menerapkan gaya kueri yang sama pada tampilan WebSocket dan stream.

Temukan pesan WebSocket yang mengandung kolom token:

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

Temukan pesan server-ke-klien:

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

Temukan pesan yang menyerupai JSON:

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

## Filter Tersimpan Praktis {#practical-saved-filters}

| Nama | Kueri |
| --- | --- |
| Kesalahan API | `req.path.cont:"/api/" AND resp.code.gte:400` |
| Endpoint autentikasi | `req.path.cont:"login" OR req.path.cont:"oauth" OR req.path.cont:"session"` |
| Lalu lintas JSON | `resp.header["content-type"].value.cont:"json"` |
| Metode menarik | `req.method:POST OR req.method:PUT OR req.method:PATCH OR req.method:DELETE` |
| Potensi rahasia | `resp.body.cont:"api_key" OR resp.body.cont:"secret" OR resp.body.cont:"token"` |

## Batas {#limits}

Agar filter tetap dapat diprediksi, Ogma membatasi kompleksitas kueri:

* Kedalaman ekspresi bersarang maksimum: 16.
* Jumlah klausa maksimum: 64.

Jika kueri terlalu kompleks, pisahkan menjadi filter tersimpan atau gunakan Cari untuk investigasi lebih luas.
