---
url: https://docs.ogmabox.com/fa/reference/httpql.md
description: >-
  تاریخچهٔ HTTP، ترافیک WebSocket، نتایج خودکارسازی و نماهای مرتبط در Ogma را با
  نحو پرس‌وجوی HTTPQL و StreamQL فیلتر کنید.
---

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

Ogma برای فیلتر کردن تاریخچهٔ HTTP، ترافیک WebSocket، نتایج خودکارسازی و نماهای مرتبط، از زیرمجموعه‌ای از یک زبان پرس‌وجوی سازگار با Caido استفاده می‌کند.

## نحو {#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"
```

پیدا کردن درخواست‌های دارای کوکی:

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

اگر پرس‌وجو بیش از حد پیچیده شد، آن را به فیلترهای ذخیره‌شده تقسیم کنید یا برای بررسی گسترده‌تر از جست‌وجو استفاده کنید.
