---
url: https://docs.ogmabox.com/th/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"
```

ค้นหาคำขอที่มีคุกกี้:

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

หากคำค้นซับซ้อนเกินไป ให้แยกเป็นตัวกรองที่บันทึกไว้ หรือใช้ **ค้นหา** เพื่อสืบค้นในขอบเขตที่กว้างขึ้น
