---
url: https://docs.ogmabox.com/zh-Hant/reference/httpql.md
description: 使用 HTTPQL 與 StreamQL 查詢語法，篩選 Ogma HTTP 歷程記錄、WebSocket 流量、自動化結果及相關檢視。
---

# 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。

如果查詢過於複雜，請拆分成已儲存的篩選條件，或使用搜尋進行更廣泛的調查。
