{"id":25195889,"url":"https://github.com/stivo182/oscript-httpbin","last_synced_at":"2026-01-18T01:35:27.634Z","repository":{"id":276380819,"uuid":"920583345","full_name":"Stivo182/oscript-httpbin","owner":"Stivo182","description":"Cервис для тестирования и отладки HTTP-запросов","archived":false,"fork":false,"pushed_at":"2025-12-15T01:51:18.000Z","size":706,"stargazers_count":18,"open_issues_count":2,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-17T17:59:39.171Z","etag":null,"topics":["api","hacktoberfest","http","http-server","httpbin","oscript","testing"],"latest_commit_sha":null,"homepage":"","language":"1C Enterprise","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Stivo182.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-01-22T12:14:04.000Z","updated_at":"2025-12-12T09:10:16.000Z","dependencies_parsed_at":"2025-02-07T22:22:28.009Z","dependency_job_id":"3bade366-4bfe-4a31-8ece-3f000613b1d8","html_url":"https://github.com/Stivo182/oscript-httpbin","commit_stats":null,"previous_names":["stivo182/oscript-httpbin"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/Stivo182/oscript-httpbin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Stivo182%2Foscript-httpbin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Stivo182%2Foscript-httpbin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Stivo182%2Foscript-httpbin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Stivo182%2Foscript-httpbin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Stivo182","download_url":"https://codeload.github.com/Stivo182/oscript-httpbin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Stivo182%2Foscript-httpbin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28526552,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"ssl_error","status_checked_at":"2026-01-18T00:39:39.467Z","response_time":85,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","hacktoberfest","http","http-server","httpbin","oscript","testing"],"created_at":"2025-02-10T01:39:01.925Z","updated_at":"2026-01-18T01:35:27.607Z","avatar_url":"https://github.com/Stivo182.png","language":"1C Enterprise","readme":"# httpbin\n\n[![Release](https://img.shields.io/github/release/Stivo182/oscript-httpbin.svg)](https://github.com/Stivo182/oscript-httpbin/releases)\n[![Тестирование](https://github.com/stivo182/oscript-httpbin/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/stivo182/oscript-httpbin/actions/workflows/test.yml)\n[![Статус порога качества](https://sonar.openbsl.ru/api/project_badges/measure?project=httpbin\u0026metric=alert_status\u0026token=sqb_2f7c84743fd1b295085c25a1b96cc8d975cd4dc7)](https://sonar.openbsl.ru/dashboard?id=httpbin)\n\nЛокальный сервис для тестирования и отладки HTTP-запросов, реализованный на [OneScript](https://github.com/EvilBeaver/OneScript) с использованием фреймворка [WINOW](https://github.com/autumn-library/winow). \nПроект предоставляет функциональность, аналогичную [httpbin.org](https://httpbin.org/), поддерживая большинство оригинальных эндпоинтов.\n\n* 1\\. [Установка](#installation)\n* 2\\. [Использование](#usage)\n    * 2.1\\. [CLI](#cli)\n    * 2.2\\. [Тестирование через OneUnit](#testing-oneunit)\n    * 2.3\\. [Тестирование через 1testrunner](#testing-1testrunner)\n    * 2.4\\. [Swagger UI](#swagger-ui)\n* 3\\. [Совместимость](#compatibility)\n* 4\\. [Программный интерфейс](#api)\n* 5\\. [Пользовательские эндпоинты](#custom-endpoints)\n* 6\\. [Ограничения](#limitations)\n* 7\\. [Сравнение с httpbin.org](#comparison)\n\n## Установка \u003ca name=\"installation\"\u003e\u003c/a\u003e\n\n``` bash\nopm install httpbin\n```\n\n## Использование \u003ca name=\"usage\"\u003e\u003c/a\u003e\n\n### CLI \u003ca name=\"cli\"\u003e\u003c/a\u003e\n\nЗапустите сервис с помощью команды: \n\n``` bash\nhttpbin run\n```\n\nПосле запуска сервис будет доступен по адресу: `http://127.0.0.1:3333`\n\n#### Опции команды:\n\n| Опция | Описание | Значение по умолчанию |\n| --- | --- | --- |\n| `-h`, `--host` | Имя хоста или IP-адрес сервиса | `127.0.0.1` |\n| `-p`, `--port` | TCP-порт сервиса | `3333` |\n| `-r`, `--routes`, `--routes-handlers` | Путь к файлу или каталогу с пользовательскими контроллерами | |\n\n### Тестирование через [OneUnit](https://github.com/sfaqer/OneUnit) \u003ca name=\"testing-oneunit\"\u003e\u003c/a\u003e\n\n``` bsl\n# test.os\n\n#Использовать asserts\n#Использовать 1connector\n#Использовать httpbin\n\nПерем HttpBin;\n\n\u0026ТестовыйНабор(Характер = \"Одиночка\")\nПроцедура ПриСозданииОбъекта()\nКонецПроцедуры\n\n\u0026ПередВсеми\nПроцедура ПередЗапускомТестов() Экспорт\n    HttpBin = Новый HttpBin();\n    HttpBin.Запустить();\nКонецПроцедуры\n\n\u0026ПослеВсех\nПроцедура ПослеЗапускаТестов() Экспорт\n    HttpBin.Остановить();\nКонецПроцедуры\n\n\u0026Тест\nПроцедура ТестДолжен_ПроверитьПараметрыЗапроса() Экспорт\n\n    ПараметрыЗапроса = Новый Структура();\n    ПараметрыЗапроса.Вставить(\"key\", \"value\");\n\n    Ответ = КоннекторHTTP.Get(HttpBin.URL(\"/get\"), ПараметрыЗапроса);\n\n    Ожидаем.Что(Ответ.КодСостояния).Равно(200);\n    Ожидаем.Что(Ответ.Заголовки[\"Content-Type\"]).Содержит(\"application/json\");\n    Ожидаем.Что(Ответ.Json()[\"args\"][\"key\"]).Равно(\"value\");\n\nКонецПроцедуры\n```\n\n### Тестирование через [1testrunner](https://github.com/artbear/1testrunner) \u003ca name=\"testing-1testrunner\"\u003e\u003c/a\u003e\n\n``` bsl\n# test.os\n\n#Использовать asserts\n#Использовать 1connector\n#Использовать httpbin\n\nПерем HttpBin;\n\n\u0026Инициализация\nПроцедура ПередЗапускомТестов() Экспорт\n    HttpBin = Новый HttpBin();\n    HttpBin.Запустить();\nКонецПроцедуры\n\n\u0026Завершение\nПроцедура ПослеЗапускаТестов() Экспорт\n    HttpBin.Остановить();\nКонецПроцедуры\n\n\u0026Тест\nПроцедура ТестДолжен_ПроверитьПараметрыЗапроса() Экспорт\n\n    ПараметрыЗапроса = Новый Структура();\n    ПараметрыЗапроса.Вставить(\"key\", \"value\");\n\n    Ответ = КоннекторHTTP.Get(HttpBin.URL(\"/get\"), ПараметрыЗапроса);\n\n    Ожидаем.Что(Ответ.КодСостояния).Равно(200);\n    Ожидаем.Что(Ответ.Заголовки[\"Content-Type\"]).Содержит(\"application/json\");\n    Ожидаем.Что(Ответ.Json()[\"args\"][\"key\"]).Равно(\"value\");\n\nКонецПроцедуры\n```\n\n### Swagger UI\n\nНа стартовой странице сервиса (по умолчанию: `http://127.0.0.1:3333`) доступна интерактивная документация API через **Swagger UI**, а также возможность отправки запросов и получения ответов.\n\n## Совместимость \u003ca name=\"compatibility\"\u003e\u003c/a\u003e\n\nПоддерживаемые платформы и версии OneScript::\n\n| ОС | OneScript 1.9 | OneScript 2.0 |\n| --- | --- | --- |\n| **Windows** | ✅ | ✅ |\n| **Linux** | ✅ | ✅ |\n| **MacOS** | ✅ | ✅ |\n\n## Программный интерфейс \u003ca name=\"api\"\u003e\u003c/a\u003e\n\n### Класс `HttpBin`\n\nКласс предназначен для управления жизненным циклом локального HTTP-сервиса.\nПоддерживает текучий интерфейс (fluent API).\n\n#### Синтаксис\n\n`Новый HttpBin(\u003cХост\u003e, \u003cПорт\u003e)`\n\n#### Параметры\n\n\u003cins\u003e\u003cХост\u003e (необязательный)\u003c/ins\u003e\u003c/br\u003e\nТип: _Строка_.\u003c/br\u003e\nIP-адрес или имя хоста.\u003c/br\u003e\nПо умолчанию: _127.0.0.1_\n\n\u003cins\u003e\u003cПорт\u003e (необязательный)\u003c/ins\u003e\u003c/br\u003e\nТип: _Число_.\u003c/br\u003e\nНомер TCP-порта.\u003c/br\u003e\nПо умолчанию: _3333_\n\n#### Методы\n\n| Метод | Описание |\n| --- | --- |\n| `Запустить()` | Запускает сервис в синхронном режиме с ожиданием полной готовности. |\n| `ЗапуститьАсинх()` | Запускает сервис в асинхронном режиме без ожидания готовности. |\n| `Остановить()` | Останавливает сервис. |\n| `ОжидатьЗавершения()` | Ожидает завершения работы сервиса, приостанавливая выполнение текущего потока. |\n| `Отвечает()` | Проверяет доступность сервиса через HTTP-запрос. |\n| `Активен()` | Проверяет, что процесс сервиса запущен и не завершен. |\n| `Порт()` | Возвращает номер TCP-порта, на котором работает сервис. |\n| `УстановитьПорт(\u003cПорт\u003e)` | Устанавливает TCP-порт для запуска сервиса. |\n| `Хост()` | Возвращает имя хоста или IP-адрес сервиса. |\n| `УстановитьХост(\u003cХост\u003e)` | Устанавливает имя хоста или IP-адрес для запуска сервиса. |\n| `URL(\u003cАдресРесурса\u003e)` | Формирует полный URL-адрес сервиса с опциональным путем к ресурсу. |\n| `ТаймаутЗапуска()` | Возвращает текущее значение таймаута запуска сервиса. |\n| `УстановитьТаймаутЗапуска(\u003cТаймаут\u003e)` | Устанавливает максимальное время ожидания запуска сервиса. Применяется при синхронном запуске. |\n| `РасположениеКонтроллеров()` | Возвращает текущий путь к файлу или каталогу с кастомными контроллерами. |\n| `УстановитьРасположениеКонтроллеров(\u003cРасположение\u003e)` | Устанавливает путь к файлу или каталогу с кастомными контроллерами, определяющими точки маршрута сервиса. |\n\n## Пользовательские эндпоинты \u003ca name=\"custom-endpoints\"\u003e\u003c/a\u003e\n\nСервис поддерживает подключение пользовательских контроллеров.\n\nКонтроллер - это класс OneScript с аннотацией `\u0026Контроллер`. \nВ классе определяются точки маршрута (эндпоинты) аннотацией `\u0026ТочкаМаршрута`.\nПодробнее см. в документации [WINOW](https://github.com/autumn-library/winow).\n\n**Пример контроллера**\n\n``` bsl\n\u0026Контроллер(\"/order\")\nПроцедура ПриСозданииОбъекта()\nКонецПроцедуры\n\n\u0026ТочкаМаршрута(\"add\")\nПроцедура Главная(Ответ) Экспорт\n    // Бизнес-логика\nКонецПроцедуры\n```\n\n### Подключение контроллеров\n\n**Через API**\n\n``` bsl\nHttpBin = Новый HttpBin()\n    .УстановитьРасположениеКонтроллеров(\"./path/to/routes\")\n    .Запустить();\n```\n\n**Через CLI**\n\n``` bash\nhttpbin run --routes './path/to/routes'\n```\n\n## Ограничения \u003ca name=\"limitations\"\u003e\u003c/a\u003e\n\n- **Отсутствие поддержки HTTPS**: Сервис работает только по протоколу HTTP.\n\n## Сравнение с httpbin.org \u003ca name=\"comparison\"\u003e\u003c/a\u003e\n\n| Эндпоинт | oscript-httpbin | httpbin.org |\n| --- | :-: | :-: |\n| `/ip` | ✅ | ✅ |\n| `/uuid` | ✅ | ✅ |\n| `/uuid/:n` | ✅ | ❌ |\n| `/user-agent` | ✅ | ✅ |\n| `/headers` | ✅ | ✅ |\n| `/get` | ✅ | ✅ |\n| `/post` | ✅ | ✅ |\n| `/put` | ✅ | ✅ |\n| `/patch` | ✅ | ✅ |\n| `/delete` | ✅ | ✅ |\n| `/anything` | ✅ | ✅ |\n| `/anything/:anything` | ✅ | ✅ |\n| `/base64/:value` | ✅ | ✅ |\n| `/encoding/utf8` | ✅ | ✅ |\n| `/gzip` | ✅ | ✅ |\n| `/deflate` | ✅ | ✅ |\n| `/brotli` | ✅ | ✅ |\n| `/zstd` | ✅ | ❌ |\n| `/status/:code` | ✅ | ✅ |\n| `/response-headers?key=val` | ✅ | ✅ |\n| `/redirect/:n` | ✅ | ✅ |\n| `/redirect-to?url=foo` | ✅ | ✅ |\n| `/redirect-to?url=foo\u0026status_code=307` | ✅ | ✅ |\n| `/relative-redirect/:n` | ✅ | ✅ |\n| `/absolute-redirect/:n` | ✅ | ✅ |\n| `/cookies` | ✅ | ✅ |\n| `/cookies/set?name=value` | ✅ | ✅ |\n| `/cookies/set/:name/:value` | ✅ | ✅ |\n| `/cookies/delete?name` | ✅ | ✅ |\n| `/basic-auth/:user/:passwd` | ✅ | ✅ |\n| `/hidden-basic-auth/:user/:passwd` | ✅ | ✅ |\n| `/digest-auth/:qop/:user/:passwd/:algorithm` | ❌ | ✅ |\n| `/digest-auth/:qop/:user/:passwd` | ❌ | ✅ |\n| `/bearer` | ✅ | ✅ |\n| `/stream/:n` | ❌ | ✅ |\n| `/delay/:n` | ✅ | ✅ |\n| `/drip?numbytes=n\u0026duration=s\u0026delay=s\u0026code=code` | ❌ | ✅ |\n| `/range/:n?duration=s\u0026chunk_size=code` | ❌ | ✅ |\n| `/html` | ✅ | ✅ |\n| `/robots.txt` | ✅ | ✅ |\n| `/deny` | ✅ | ✅ |\n| `/cache` | ✅ | ✅ |\n| `/cache/:n` | ✅ | ✅ |\n| `/etag/:etag` | ✅ | ✅ |\n| `/bytes/:n` | ✅ | ✅ |\n| `/stream-bytes/:n` | ❌ | ✅ |\n| `/links/:n` | ✅ | ✅ |\n| `/links/:n/:offset` | ✅ | ✅ |\n| `/image` | ✅ | ✅ |\n| `/image/png` | ✅ | ✅ |\n| `/image/jpeg` | ✅ | ✅ |\n| `/image/webp` | ✅ | ✅ |\n| `/image/svg` | ✅ | ✅ |\n| `/forms/post` | ✅ | ✅ |\n| `/xml` | ✅ | ✅ |\n| `/json` | ✅ | ✅ |\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstivo182%2Foscript-httpbin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstivo182%2Foscript-httpbin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstivo182%2Foscript-httpbin/lists"}