العودة إلى التحديثات
New releaseSep 5, 2026

resterm v1.5.6

عميل API للطرفية (Terminal) يدعم HTTP وGraphQL وgRPC. ملفات .http بسيطة يمكنك مقارنتها والتحكم بإصداراتها، مع سير عمل، نماذج محاكاة، تنميط، تتبّع، استيراد OpenAPI، أنفاق SSH، إعادة توجيه منافذ Kubernetes، WebSocket وSSE ومشغّل CLI.

مشاركة

Resterm
Resterm

عميل API وبيئة عمل أصلية للطرفية تدعم REST وGraphQL وgRPC وWebSocket وSSE.

لقطة شاشة لواجهة Resterm TUI الأساسية

Resterm هو بيئة عمل API-as-code - أو، بمصطلحات أكثر ألفة، عميل API - مبني حول ملفات .http و.rest نصية عادية يمكنك مقارنتها ومراجعتها والتحكم في إصداراتها. يجمع بين تحرير الطلبات التفاعلي وسير العمل التصريحي والتأكيدات والخوادم الوهمية والتتبع والتنميط والأتمتة بدون واجهة رسومية. كل شيء يبقى على جهازك. لا حسابات، لا مزامنة سحابية، لا تتبع.

إذا كنت تبحث عن عميل بأسلوب Postman يركز على مجموعات الواجهة الرسومية، فمن المحتمل أن Resterm ليس مناسبًا لك، لكن جرّبه على أي حال!

[!NOTE] Resterm الآن في الإصدار v1! راجع ملاحظات إصدار v1.0.0 للاطلاع على الميزات الجديدة والتغييرات الجذرية.

روابط سريعة: لقطات الشاشة، البدء السريع، ملفات الطلبات، التثبيت، التوثيق.

جولة في لقطات الشاشة

شاهد الواجهة أثناء العمل (انقر للتوسيع)

سير العمل

لقطة شاشة لـ Resterm مع سير العمل

التتبع والخط الزمني

لقطة شاشة لـ Resterm مع الخط الزمني

التنميط

لقطة شاشة لتنميط Resterm

الشرح

لقطة شاشة لتبويب الشرح في Resterm

RestermScript

لقطة شاشة لـ Resterm مع RestermScript

السمة الفاتحة

لقطة شاشة لـ Resterm بالسمة الفاتحة

عرض توضيحي لمتصفح OAuth (تصميم واجهة قديم)

تدفق OAuth في Resterm

لماذا Resterm

  • HTTP وGraphQL وgRPC وWebSocket وSSE جاهزة فورًا.
  • الأتمتة تعيش داخل ملفات الطلبات: الشروط (@when، @if/@elif/@else، @for-each)، سير العمل متعدد الخطوات (@workflow / @step)، الالتقاطات، المتغيرات والتأكيدات (@capture، @var، @assert).
  • RestermScript، لغة تعبيرات صغيرة مبنية خصيصًا لـ Resterm، مع خطافات JavaScript عندما تريدها.
  • تحكم بأسلوب Vim مع تلميحات شريط سفلي سياقية، ومساعدة دون اتصال قابلة للبحث، ومساعدة K تحت المؤشر، وبحث / وأوامر مثل :w و:q و:help و:docs.
  • مصادقة وتنقيب مدمجان: OAuth 2.0 (بيانات اعتماد العميل، كلمة المرور، رمز المصادقة مع PKCE)، مصادقة مدعومة بواجهات CLI الموجودة لديك، أنفاق SSH وإعادة توجيه منافذ Kubernetes. لا حاجة لأدوات إضافية.
  • مشغّل CLI: resterm run للتشغيل النصي وفي CI، مع مخرجات JSON وJUnit.
  • خوادم وهمية معلنة بجوار الطلبات التي تحاكيها، مع قواعد المطابقة والتسلسلات والتحقق من الاستدعاءات وإعادة التحميل السريع.
  • تتبع الخط الزمني والتنميط ومقارنة التشغيلات عبر البيئات.
  • سجلات البث ووحدة تحكم تفاعلية لـ WebSocket وSSE.
  • لا تكامل مع الذكاء الاصطناعي، أبدًا.

البدء السريع

  1. ثبّت Resterm (راجع التثبيت للنصوص البرمجية وWindows والتثبيت اليدوي). ```bash brew install resterm
  2. قم بتهيئة مساحة عمل. ```bash mkdir my-api && cd my-api resterm init

resterm init يمنحك مشروعًا صغيرًا يعمل دون اتصال بالإنترنت. يتضمن ملف requests.http المُنشأ سيناريوهات محاكاة محلية وعددًا من الطلبات التي تعتمد على بعضها البعض. تغطي هذه السيناريوهات التأكيدات، ومصادقة bearer، ومطابقة JSON، وjson-rules، و@for-each.

  1. ابدأه وأرسل طلبك الأول. ```bash resterm

اضغط Ctrl+Enter في المحرر لإرسال الطلب المحدد.

لا توجد ملفات بعد؟ فقط شغّل resterm، واكتب عنوان URL واضغط Ctrl+Enter. كما يعمل أمر curl الملصق أيضًا.

ملفات الطلبات

تستخدم ملفات طلبات Resterm صيغة HTTP القياسية بالإضافة إلى توجيهات # @ للتكوين والأتمتة:```http

@setting base-url https://api.example.com/v1/

Create users

// Send this request once for each name in the list.

@for-each ["david", "tom"] as name

@when env.mode == "development"

@assert response.statusCode == 201

POST users Content-Type: application/json

{"name":"{{= name }}"}

الإعدادات قبل الطلب الأول تنطبق على الملف بأكمله، و`###` يفصل بين الطلبات، ويمكن للتوجيهات تكرار الطلب أو تقييده أو التحقق من صحته. مزيد من الأمثلة هنا: [`_examples/`](https://github.com/unkn0wn-root/resterm/blob/main/_examples).

## CLI

`resterm run` ينفّذ ملفات `.http` / `.rest` دون فتح واجهة TUI، وهذا ما يعمل به CI.```bash
resterm run --request CreateUser requests.http

المشروع المُولَّد يتواصل مع خادم محاكاة محلي. ابدأ تشغيله في طرفية أخرى أولاً:```bash resterm mock requests.http

في واجهة TUI، اضغط `g Shift+M` بدلاً من ذلك لبدء نفس خادم المحاكاة من مساحة العمل.

توثيق [CLI](https://github.com/unkn0wn-root/resterm/blob/main/docs/cli.md) يغطي المحددات، صيغ الإخراج والمزيد من الأمثلة.

## ورقة اختصارات لوحة المفاتيح

- تركيز الأجزاء والتخطيط
  - `Tab` / `Shift+Tab`: التنقل بين الشريط الجانبي، المحرر والاستجابة.
  - `g+r`، `g+i`، `g+p`: الانتقال إلى الطلبات، المحرر أو الاستجابة.
  - `g+h` / `g+l`: تغيير الحجم أفقيًا. يغيّر عرض الشريط الجانبي عند تركيزه، أو تقسيم المحرر/الاستجابة بخلاف ذلك.
  - `g+j` / `g+k`: تغيير ارتفاع المحرر/الاستجابة عند تكديسهما، أو طي/توسيع الفروع في المستكشف.
  - `g+v` / `g+s`: تبديل جزء الاستجابة بين التخطيط المضمّن والمكدّس.
  - `g+1`، `g+2`، `g+3`: تصغير أو استعادة الشريط الجانبي، المحرر، الاستجابة.
  - `g+z` / `g+Z`: تكبير الجزء المركّز، إلغاء التكبير.
- البيئات والمتغيرات العامة
  - `Ctrl+E`: تبديل البيئات.
  - `Ctrl+G`: فحص المتغيرات العامة الملتقطة.
- المساعدة والأوامر
  - `?`: فتح فهرس المساعدة غير المتصل القابل للبحث.
  - `K` (وضع المحرر العادي): فتح المساعدة للتوجيه أو القالب أو الكلمة الأساسية تحت المؤشر.
  - `:help <topic>` / `:man <topic>`: فتح موضوع مضمّن؛ `:docs <topic>` يفتح الدليل الكامل المطابق للإصدار.
  - `Ctrl+O`: فتح نافذة الملف/مساحة العمل المنبثقة. اكتب للتصفية، مرّر باستخدام `Up` / `Down`، واستخدم `Tab` للانتقال إلى المجلدات.
  - `:`: فتح سطر الأوامر. استخدم `Up` / `Down` لتحديد الاقتراحات، `Tab` لإكمال أحدها، أو `Enter` لقبول وتشغيل تحديد. وسيطات المسار مثل `:mock start --source` و `:edit` تتصفح نظام الملفات في نفس النافذة المنبثقة.
- الاستجابات
  - `Ctrl+V` / `Ctrl+U`: تقسيم جزء الاستجابة للمقارنة جنبًا إلى جنب.
  - `Ctrl+Shift+C` أو `g y` (عند تركيز الاستجابة): نسخ علامة التبويب Pretty أو Raw أو Headers بالكامل.
  - `g x`: عرض معاينة Explain للطلب النشط دون إرساله.
  - `g e`: فتح الملف الحالي في محررك الخارجي.

> [!TIP]
> إذا كنت تتذكر ثلاثة اختصارات فقط:
> - `Ctrl+Enter` يرسل الطلب
> - `Tab` / `Shift+Tab` يبدّل بين الأجزاء
> - `g+p` ينتقل إلى الاستجابة

## التثبيت

**Linux / macOS (Homebrew)**```bash
brew install resterm

[!NOTE] يجب تحديث تثبيتات Homebrew باستخدام Homebrew (brew upgrade resterm). الأمر المدمج resterm --update مخصص للثنائيات المثبتة من إصدارات GitHub أو نصوص التثبيت.

Linux / macOS (نص برمجي Shell)

[!IMPORTANT] تعتمد الثنائيات الجاهزة لنظام Linux على glibc 2.32 أو أحدث. على توزيعة أقدم، قم بالبناء من المصدر باستخدام سلسلة أدوات glibc أحدث أو قم بترقية glibc قبل استخدام أرشيفات الإصدار.```bash curl -fsSL https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.sh | bash

أو باستخدام `wget`:```bash
wget -qO- https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.sh | bash

ويندوز (PowerShell)```powershell iwr -useb https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.ps1 | iex

النصوص تكتشف بنية جهازك، وتنزّل أحدث إصدار وتثبّت الملف الثنائي.

### التثبيت اليدوي

> [!NOTE]
> أداة التثبيت اليدوي تستخدم `curl` و `jq`. ثبّت `jq` عبر مدير الحزم الخاص بك (`brew install jq`, `sudo apt install jq`, إلخ).

**Linux / macOS**```bash
# Detect latest tag
LATEST_TAG=$(curl -fsSL https://api.github.com/repos/unkn0wn-root/resterm/releases/latest | jq -r .tag_name)

# Download the matching binary (Darwin/Linux + amd64/arm64)
curl -fL -o resterm "https://github.com/unkn0wn-root/resterm/releases/download/${LATEST_TAG}/resterm_$(uname -s)_$(uname -m)"

# Make it executable and move it onto your PATH
chmod +x resterm
sudo install -m 0755 resterm /usr/local/bin/resterm

ويندوز (PowerShell)```powershell $latest = Invoke-RestMethod https://api.github.com/repos/unkn0wn-root/resterm/releases/latest $asset = $latest.assets | Where-Object { $.name -like 'resterm_Windows*' } | Select-Object -First 1 Invoke-WebRequest -Uri $asset.browser_download_url -OutFile resterm.exe

Optionally relocate to a directory on PATH, e.g.:

Move-Item resterm.exe "$env:USERPROFILE\bin\resterm.exe"

### من المصدر```bash
go install github.com/unkn0wn-root/resterm/cmd/resterm@latest

تحديث```bash

resterm --check-update resterm --update

الأمر الأول يتحقق مما إذا كان هناك إصدار أحدث متاح. الأمر الثاني يقوم بالتنزيل والتحقق والتثبيت في مكانه. على ويندوز، يبقى الملف الثنائي القديم بجوار الجديد باسم `resterm.exe.old` ويتم تنظيفه عند التحديث التالي.

## الإعداد

- البيئات هي ملفات JSON (`resterm.env.json`) يتم اكتشافها في دليل الطلب أو جذر مساحة العمل أو دليل العمل الحالي (CWD). يمكن للملف تعريف بيئات مسماة أو مجموعات مستقلة، على سبيل المثال api و app و credentials، التي تتحد في بيئة واحدة. ملفات Dotenv (`.env`, `.env.*`) اختيارية عبر `--env-file` وهي خاصة بمساحة عمل واحدة. راجع [البيئات المجمعة](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#grouped-environments) والمثال القابل للتشغيل في `_examples/grouped/`.
- يتم تخزين الإعدادات حسب نظام التشغيل ويمكن تجاوزها باستخدام `RESTERM_CONFIG_DIR`:
  - macOS: `~/Library/Application Support/resterm`
  - ويندوز: `%APPDATA%\resterm`
  - لينكس/يونكس: `~/.config/resterm`

## خوادم المحاكاة

يمكنك تعريف استجابات المحاكاة في نفس ملفات `.http` التي تحتوي على طلباتك.

- طابق الطلبات الواردة حسب الاستعلام أو الترويسات أو جسم JSON، ثم اختر استجابة مسماة أو افتراضية.
- أعد سلسلة من الاستجابات لاختبارات الاستطلاع وإعادة المحاولة. استخدم مسارًا أو استعلامًا أو ترويسة أو قيمة ملف تعريف ارتباط لتتبع كل سلسلة على حدة.
- أخر الاستجابات بمقدار ثابت، أو أعطِ كل طلب تأخيرًا مختلفًا باستخدام `random` أو `normal` أو `jitter`.
- أنشئ الاستجابات من قيم المسار والاستعلام والترويسات والجسم، مع مولّدات للبيانات الديناميكية.
- تحقق من أعداد الاستدعاءات باستخدام `@expect` أو افحص حركة المرور المستلمة من RestermScript.
- إعادة تحميل ساخنة لملفات المصدر والملفات الثابتة، مع دعم اختياري لـ TLS.

سيناريوهان على مسار واحد:```http
### Payment accepted
# @mock method=POST path=/payments name=accepted default=true latency=150ms
HTTP/1.1 202 Accepted
Content-Type: application/json

{"id":"pay_123","status":"pending"}

### Payment declined
# @mock method=POST path=/payments name=declined
# @match query={"mode":"decline"} headers={"X-Tenant":"demo"} json={"amount":0}
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json

{"error":"amount must be positive"}

قدّم ملفًا واحدًا أو دليلًا كاملًا:```bash resterm mock ./requests.http resterm mock --recursive --addr 127.0.0.1:9090 ./requests

المزيد في [مرجع الخوادم الوهمية](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#mock-servers)، ودليل [`resterm mock` لواجهة الأوامر](https://github.com/unkn0wn-root/resterm/blob/main/docs/cli.md#resterm-mock) والمثال العملي ([_examples/mocks.http](https://github.com/unkn0wn-root/resterm/blob/main/_examples/mocks.http)).

## بدون واجهة رسومية (Headless)

حزمة [`headless`](https://github.com/unkn0wn-root/resterm/blob/main/headless) هي واجهة Go البرمجية العامة لنفس المحرك الذي يشغّل واجهة TUI وواجهة الأوامر. استخدمها لتشغيل الطلبات وسير العمل والتحقق من الصحة ومقارنة عمليات التشغيل والملفات الشخصية من كود Go الخاص بك أو من CI.

إذا كنت تفضّل عدم بناء مشغّل بنفسك، فهناك [resterm-runner](https://github.com/unkn0wn-root/resterm-runner).

## المجموعات (Collections)

صدّر مساحة عمل كحزمة متوافقة مع Git واستوردها إلى مساحة عمل أخرى. تحمل الحزم ملف `manifest.json` مع مجاميع اختبارية (checksums)، بحيث تتحقق عمليات الاستيراد أولاً من سلامة الملفات. يتم تصدير قيم البيئة كعناصر نائبة `REPLACE_ME`، بحيث لا تغادر الأسرار جهازك أبداً.```bash
resterm collection export --workspace ./my-api --out ./shared/my-api-bundle
resterm collection import --in ./shared/my-api-bundle --workspace ./my-local-api

أضف --dry-run لمعاينة الاستيراد و--force لاستبدال الملفات الموجودة. الوثائق: مشاركة المجموعات.

استيراد Curl

الصق أمر curl في المحرر واضغط Ctrl+Enter لتحويله إلى طلب منظم. يفهم Resterm العلامات الشائعة، ويدمج مقاطع البيانات المتكررة، ويحافظ على عمليات الرفع متعددة الأجزاء سليمة. يتم تجاهل بادئات الصدفة مثل sudo أو $. يقوم CLI بنفس التحويل باستخدام --from-curl.

هذا:```bash curl -X POST https://api.example.com/login
-H "Content-Type: application/json"
--user demo:secret
-d '{"user":"demo"}'

يصبح هذا:```http
### POST https://api.example.com/login
# @auth basic demo secret
POST https://api.example.com/login
Content-Type: application/json

{"user":"demo"}

Docs: الطلبات المضمّنة وأمثلة الاستيراد.

RestermScript

RestermScript (RTS) هي لغة تعبيرات صغيرة مبنية خصيصًا لـ Resterm. تستهدف تنسيق الطلبات وسير العمل والتوجيهات مباشرةً، مما يُبقي السكربتات قصيرة وقابلة للتنبؤ. تبقى خطافات JavaScript متاحةً عندما تحتاج إلى المزيد.

مثال سريع (وحدة RTS + طلب):```rts // rts/helpers.rts module helpers export fn authHeader(token) { return token ? "Bearer " + token : "" }

أداة `subfinder` هي أداة اكتشاف نطاقات فرعية سلبية مبنية على أساس بحثي، وتستخدم مصادر بيانات مختلفة لحل النطاقات الفرعية من أجل اكتشاف الأصول الصالحة. تم تصميمها كأداة تمرير سريعة وقابلة للتخصيص بدرجة كبيرة، وتتميز ببنية معيارية بسيطة ولكنها قابلة للتوسيع.

**ميزاتها:**

- **اكتشاف نطاقات فرعية سلبية** عبر مصادر متعددة
- **دعم مصادر بيانات قابلة للتخصيص** لتحسين نتائج الاكتشاف
- **مخرجات قابلة للتخصيص** بصيغ JSON وJSONL وSTDIN
- **دعم أنابيب الأوامر** للاستخدام مع أدوات أخرى
- **دعم التكوين عبر ملفات YAML** لإعدادات مرنة
- **دعم مفاتيح API** للوصول إلى مصادر بيانات إضافية
- **دعم وكيل HTTP** لتوجيه الطلبات
- **دعم معدل الطلبات** للتحكم في سرعة الاكتشاف
- **دعم مهلة زمنية** للتحكم في مدة الانتظار
- **دعم إعادة المحاولة** لتحسين الموثوقية
- **دعم وضع الصمت** لتقليل الإخراج غير الضروري
- **دعم وضع الإصدار** لعرض معلومات الإصدار
- **دعم وضع المساعدة** لعرض خيارات الاستخدام

**الاستخدام:**

```bash
subfinder [flags]

الأعلام:

Flags:
  -d, -domain string[]   النطاقات لاكتشاف النطاقات الفرعية لها
  -dL, -list string      ملف يحتوي على قائمة بالدومينات لاكتشاف النطاقات الفرعية لها
  -nW, -active           عرض النطاقات الفرعية النشطة فقط
  -iL, -input string     ملف يحتوي على قائمة بالدومينات لاكتشاف النطاقات الفرعية لها
  -r, -recursive         استخدام الاكتشاف العودي للنطاقات الفرعية
  -all                   استخدام جميع مصادر البيانات لاكتشاف النطاقات الفرعية
  -cs, -collect-sources  عرض مصادر البيانات المستخدمة في الاكتشاف
  -oI, -ip               عرض عنوان IP للنطاقات الفرعية المكتشفة
  -nP, -no-passive       تعطيل الاكتشاف السلبي للنطاقات الفرعية
  -nR, -no-recursive     تعطيل الاكتشاف العودي للنطاقات الفرعية
  -nW, -no-wildcard      تعطيل اكتشاف النطاقات الفرعية البرية
  -m, -max-time int      الحد الأقصى للوقت المسموح به للاكتشاف (بالثواني)
  -p, -ports string      المنافذ للتحقق من النطاقات الفرعية النشطة
  -t, -timeout int       مهلة زمنية للطلبات (بالثواني)
  -rL, -resolvers string قائمة بمحللات DNS مخصصة
  -rD, -resolver string  محلل DNS مخصص
  -o, -output string     ملف الإخراج
  -oJ, -json             إخراج بصيغة JSON
  -oL, -list             إخراج بصيغة JSONL
  -oD, -dir string       دليل الإخراج
  -s, -silent            وضع الصمت
  -v, -verbose           وضع الإخراج المفصل
  -version               عرض معلومات الإصدار
  -h, -help              عرض المساعدة

أمثلة على الاستخدام:

# اكتشاف النطاقات الفرعية لدومين واحد
subfinder -d example.com

# اكتشاف النطاقات الفرعية لدومينات متعددة
subfinder -d example.com -d example.org

# اكتشاف النطاقات الفرعية من ملف
subfinder -dL domains.txt

# اكتشاف النطاقات الفرعية مع عرض عناوين IP
subfinder -d example.com -oI

# اكتشاف النطاقات الفرعية مع إخراج JSON
subfinder -d example.com -oJ

# اكتشاف النطاقات الفرعية مع إخراج JSONL
subfinder -d example.com -oL

# اكتشاف النطاقات الفرعية مع حفظ النتائج في ملف
subfinder -d example.com -o output.txt

# اكتشاف النطاقات الفرعية مع استخدام جميع مصادر البيانات
subfinder -d example.com -all

# اكتشاف النطاقات الفرعية مع استخدام محلل DNS مخصص
subfinder -d example.com -rD 8.8.8.8

# اكتشاف النطاقات الفرعية مع استخدام قائمة محللات DNS
subfinder -d example.com -rL resolvers.txt

# اكتشاف النطاقات الفرعية مع تحديد مهلة زمنية
subfinder -d example.com -t 10

# اكتشاف النطاقات الفرعية مع تحديد الحد الأقصى للوقت
subfinder -d example.com -m 60

# اكتشاف النطاقات الفرعية مع استخدام وكيل HTTP
subfinder -d example.com -p http://proxy.example.com:8080

# اكتشاف النطاقات الفرعية مع استخدام معدل طلبات محدد
subfinder -d example.com -rate 10

# اكتشاف النطاقات الفرعية مع إعادة المحاولة
subfinder -d example.com -retry 3

# اكتشاف النطاقات الفرعية مع وضع الصمت
subfinder -d example.com -s

# اكتشاف النطاقات الفرعية مع وضع الإخراج المفصل
subfinder -d example.com -v

# اكتشاف النطاقات الفرعية مع عرض معلومات الإصدار
subfinder -version

# اكتشاف النطاقات الفرعية مع عرض المساعدة
subfinder -h

التثبيت:

go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest

التكوين:

يمكن تكوين subfinder عبر ملف YAML. الملف الافتراضي هو ~/.config/subfinder/config.yaml. يمكنك تحديد ملف تكوين مخصص باستخدام العلم -config.

# مثال على ملف التكوين
resolvers:
  - 8.8.8.8
  - 8.8.4.4
  - 1.1.1.1

sources:
  - archive
  - crt
  - hackertarget
  - rapiddns
  - threatcrowd
  - virustotal

keys:
  virustotal: "YOUR_API_KEY"
  censys: "YOUR_API_KEY"
  securitytrails: "YOUR_API_KEY"
  chaos: "YOUR_API_KEY"
  shodan: "YOUR_API_KEY"
  fofa: "YOUR_API_KEY"
  binaryedge: "YOUR_API_KEY"
  bufferover: "YOUR_API_KEY"
  c99: "YOUR_API_KEY"
  certspotter: "YOUR_API_KEY"
  dnsdb: "YOUR_API_KEY"
  github: "YOUR_API_KEY"
  intelx: "YOUR_API_KEY"
  passivetotal: "YOUR_API_KEY"
  recon: "YOUR_API_KEY"
  robtex: "YOUR_API_KEY"
  threatbook: "YOUR_API_KEY"
  urlscan: "YOUR_API_KEY"
  zoomeye: "YOUR_API_KEY"

مصادر البيانات:

يدعم subfinder مجموعة واسعة من مصادر البيانات لاكتشاف النطاقات الفرعية، بما في ذلك:

  • Archive.org
  • Crt.sh
  • HackerTarget
  • RapidDNS
  • ThreatCrowd
  • VirusTotal
  • Censys
  • SecurityTrails
  • Chaos
  • Shodan
  • FOFA
  • BinaryEdge
  • BufferOver
  • C99
  • CertSpotter
  • DNSDB
  • GitHub
  • IntelX
  • PassiveTotal
  • Recon
  • Robtex
  • ThreatBook
  • URLScan
  • ZoomEye

الاعتمادات:

@use ./rts/helpers.rts

@when env.has("feature")

@assert response.statusCode == 200

GET https://api.example.com/users/{{= vars.get("user") }} Authorization: {{= helpers.authHeader(vars.get("auth.token")) }}

المرجع الكامل: [`docs/restermscript.md`](https://github.com/unkn0wn-root/resterm/blob/main/docs/restermscript.md).

## شرح معمّق

### OAuth 2.0

استخدم `@auth oauth2` للحصول على الرموز المميزة وحقنها. يتم تخزين الرموز مؤقتًا لكل بيئة ويتم تحديثها عند الإمكان. يُعد منح بيانات اعتماد العميل هو الخيار الافتراضي. كما يتم دعم منح كلمة المرور ورمز التفويض مع PKCE أيضًا:```http
### Service status
# @auth oauth2 token_url={{oauth.tokenUrl}} client_id={{oauth.clientId}} client_secret={{oauth.clientSecret}} cache_key=my-api
GET {{base.url}}/anything/projects

مثال: _examples/oauth2.http. راجع توثيق OAuth 2.0.

سير العمل والبرمجة النصية

سير العمل يربط الطلبات المسماة ويمكنه اختيار الخطوة التالية من الاستجابة:```http

Sign in

@workflow sign-in

@step Login using=Login

// GetProfile and RefreshToken are request names. // The first true condition runs the named request.

@if last.statusCode == 200 run=GetProfile

@elif last.statusCode == 401 run=RefreshToken

@else fail="unexpected login response"

يمكنها أيضًا تمرير البيانات بين الخطوات وتشغيل خطافات RestermScript أو JavaScript. مثال: [`_examples/workflows.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/workflows.http). راجع [توثيق سير العمل](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#workflows).

### الاستطلاع وإعادة المحاولة

استخدم `@poll` لتكرار طلب حتى يصبح شرط الاستجابة صحيحًا. أضف `@retry` لإعادة محاولة فشل الشبكة أو انتهاء المهلة أو استجابات محددة مع تراجع أسي:```http
### Wait for job
# @retry count=4
# @retry-when response.statusCode in [429, 502, 503]
# @retry-backoff exponential(100ms, 2s) jitter=20%
# @poll every=500ms timeout=30s until=response.json().status == "completed"
GET {{base.url}}/jobs/{{job.id}}

كل دورة استطلاع تحصل على ميزانية إعادة محاولة خاصة بها. مثال: _examples/polling-retries.http. راجع وثائق الاستطلاع وإعادة المحاولات.

مقارنة عمليات التشغيل

@compare يشغّل طلبًا واحدًا مقابل بيئتين على الأقل ويستخدم نتيجة واحدة كخط أساس:```http

Compare health

@compare dev stage prod base=prod

GET {{services.api.base}}/status

اضغط `g+c` لتشغيله في واجهة TUI، أو مرّر `--compare` في سطر الأوامر. مثال: [`_examples/compare.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/compare.http). راجع [وثائق المقارنة](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#compare-runs).

### التتبّع والخط الزمني

يسجّل `@trace` مراحل HTTP ويمكنه الإشارة إلى الطلبات التي تتجاوز ميزانيات زمن الاستجابة:```http
### Trace API
# @trace dns<=50ms connect<=120ms total<=400ms tolerance=25ms
GET https://api.example.com/health

تظهر النتائج في تبويب الخط الزمني (Timeline) ويمكن تصديرها إلى OpenTelemetry. مثال: _examples/trace.http. راجع وثائق التتبع.

البث (WebSocket وSSE)

يسجّل @sse أحداث الخادم، بينما يقوم @websocket و@ws ببرمجة إطارات WebSocket. ينتج كلاهما نصوصًا في تبويب البث (Stream):```http

Events

@sse duration=30s idle=10s max-events=5

GET https://api.example.com/events

Chat

@websocket idle=3s

@ws send Hello

@ws close 1000 done

GET wss://api.example.com/chat

مثال: [`_examples/streaming.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/streaming.http). راجع [توثيق البث](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#streaming-sse--websocket).

### gRPC

استخدم سطر طلب `GRPC` للخادم و`@grpc` للطريقة المؤهلة بالكامل. النص هو protobuf JSON:```http
### Get user
# @grpc users.UserService/GetUser
# @grpc-plaintext true
GRPC {{grpc.host}}

{"tenantId":"{{tenant.id}}"}

تمكين انعكاس الخادم (Server reflection) افتراضيًا. كما أن مجموعات الواصفات (Descriptor sets) واستدعاءات البث (streaming calls) مدعومة أيضًا. مثال: _examples/grpc.http. راجع وثائق gRPC.

استيراد OpenAPI

أنشئ طلبات، أو نماذج محاكاة (mocks)، أو كليهما من مستند OpenAPI محلي أو من عنوان http(s) URL:```bash resterm --from-openapi _examples/openapi-spec.yml --http-out api.http --openapi-mode both

عمليات الجلب عن بُعد تحترم `--insecure` و `--proxy`. مثال على الإدخال: [`_examples/openapi-spec.yml`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/openapi-spec.yml). راجع [وثائق الاستيراد](https://github.com/unkn0wn-root/resterm/blob/main/docs/cli.md#import-examples).

### أنفاق SSH

قم بتعريف ملف تعريف SSH قبل الطلبات التي تستخدمه، ثم حدده باستخدام `use=`:```http
// Set key to choose a key file. Leave it out to use your SSH agent or a default key.
# @ssh file edge host=jump.example.com user=ops key=~/.ssh/id_ed25519

### Internal API
# @ssh use=edge
GET http://10.0.0.10/v1/health

الملفات الشخصية يمكن أن تكون على مستوى الملف أو على مستوى مساحة العمل، كما أن الأنفاق المضمنة لمرة واحدة مدعومة أيضًا. مثال: _examples/ssh.http. راجع وثائق SSH.

إعادة توجيه المنافذ في Kubernetes

@k8s يفتح إعادة توجيه منفذ مُدارة إلى pod أو service أو deployment أو statefulset:```http

Service health

@k8s namespace=default service=api port=http

GET http://api.default.svc.cluster.local/health

الأهداف يمكن أن تستخدم منافذ رقمية أو مسماة ويمكن حفظها كملفات تعريف قابلة لإعادة الاستخدام. مثال: [`_examples/k8s.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/k8s.http). راجع [توثيق Kubernetes](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#kubernetes-port-forwards).

### التنسيق والربط

قم بتخصيص الألوان واختصارات لوحة المفاتيح باستخدام `themes/*.toml` و `bindings.toml` أو `bindings.json` في دليل الإعدادات. التوثيق: [`docs/resterm.md#theming`](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#theming) و [`docs/resterm.md#custom-bindings`](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#custom-bindings).

## التوثيق

- [`docs/resterm.md`](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md) يغطي صيغة الطلبات والتوجيهات والبرمجة النصية ووسائل النقل.
- [`docs/cli.md`](https://github.com/unkn0wn-root/resterm/blob/main/docs/cli.md) يغطي `resterm run` وأدوات الاستيراد والمجموعات والسجل.
- [التوافق](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#compatibility) يشرح ضمانات التوافق الخاصة بـ Resterm للإصدار v1.

داخل واجهة TUI، اضغط `?` أو شغّل `:help`. استخدم `:docs` عندما تريد الدليل الكامل على الويب للإصدار المثبت.

## الترخيص

[رخصة Apache 2.0](https://github.com/unkn0wn-root/resterm/blob/main/LICENSE).

الفئات