Открытие TCP порта и возврат ошибки HTTP

Вопрос или проблема

Мне нужен бесплатный инструмент для Windows, который открывает определённый TCP-порт (настраиваемый, например, порт 80) и возвращает код ошибки HTTP (настраиваемый, например, HTTP 503).

Он должен иметь версию с командной строки. Интерфейс пользователя не обязателен, но может быть, например, если параметры не заданы. Это не должно быть расширением для браузера (Chrome, Firefox).

Инструмент должен быть как можно более простым. Я не хочу полноценный веб-прокси с поддержкой REST и множеством конфигураций. Это должно быть совместимо с BDU (пользователь с низким уровнем подготовки) 🙂

Хотя это может быть почти тривиально реализовать самому, я предпочел бы не получать рекомендацию по языку программирования. Я не хочу поддерживать эту штуку.

Для чего я буду использовать это?

  1. Тестирование.

    Некоторые из наших приложений используют HTTP. Я хочу увидеть, как они ведут себя, если служба недоступна и так далее.

  2. Ускорение приложений.

    Некоторые приложения пытаются подключиться к Интернету, но наш IT-отдел заблокировал порт с помощью брандмауэра. Поэтому эти приложения никогда не получат ответ. Обычно они будут пытаться 3 раза и ждать до 1 минуты на каждую попытку. Это создает задержку в 3 минуты.

    С помощью инструмента я могу изменить файл hosts, чтобы он указывал на мой локальный компьютер. Если инструмент возвращает HTTP404, приложение, вероятно, остановится после 1 попытки и также получит ответ немедленно, так что не нужно ждать.

Mock Server кажется, может выполнить то, что вам нужно, но вам нужно будет немного покопаться, чтобы заставить его работать. Вот git репозиторий.

Для любой системы, с которой вы интегрируетесь через HTTP или HTTPS, MockServer можно использовать как:

макет, настроенный на возврат конкретных ответов на разные запросы
прокси, записывающий и при желании модифицирующий запросы и ответы
и прокси для некоторых запросов, и макет для других запросов одновременно. Когда MockServer получает запрос, он сопоставляет запрос с активными ожиданиями, которые были настроены. Затем, если соответствий не найдено, он проксирует запрос, если это уместно; в противном случае возвращает 404.

Для каждого полученного запроса происходят следующие шаги:

найти соответствующее ожидание и выполнить действие
если нет совпадающего ожидания — проксировать запрос
если не прокси-запрос — вернуть 404

На мой взгляд, гораздо проще использовать http-server-mock библиотеку Python, которая, да, потребует немного кода от вас, но в остальном приведет вас к результату почти мгновенно:

from http_server_mock import HttpServerMock
import requests
app = HttpServerMock(__name__)

@app.route("/", methods=["GET"])
def index():
    return "Hello world"

with app.run("localhost", 5000):
    r = requests.get("http://localhost:5000/")
    # r.status_code == 200               # <<<------ довольно уверен, что это то, что вам нужно
    # r.text == "Hello world"

Изучая документацию Flask (на основе которой построен http-server-mock), make_response кажется тем, как вы устанавливаете коды состояния в функции index:

def index():
    response = make_response(render_template('not_found.html'), 404)
    return response

И наконец, я нашел httpstat.us, который является онлайн-сервисом, который просто возвращает разные коды состояния http, так что, возможно, это поможет в вашем случае, если вам не нужен локальный сервер, который возвращает коды.

Ответ или решение

Для решения вашей задачи по открытию определенного TCP порта (например, порта 80) и возврату кода ошибки HTTP (например, HTTP 503), предлагаю рассмотреть несколько доступных инструментов, которые соответствуют вашим требованиям.

1. MockServer

MockServer – это мощный инструмент, который идеально подходит для ваших нужд. Он может быть настроен для возврата различных ответов на HTTP-запросы, включая возврат кодов ошибок. MockServer может работать как прокси и как мок-сервер, позволяя гибко обрабатывать запросы.

Основные характеристики:

  • Гибкая настройка: Вы можете конфигурировать сервер для возврата любых кодов состояния HTTP в зависимости от входящих запросов.
  • Документация: Полная документация здесь, дающая возможность быстро вникнуть в процесс настройки.
  • Применение: Мок-сервер может использоваться для тестирования ваших приложений, позволяя им получать ошибки, которые вы хотите симулировать.

Как запустить MockServer:

  1. Скачайте MockServer и следуйте инструкциям по установке.
  2. Настройте ответ сервера на определенный код статуса, используя пример настроек в документации.

2. http-server-mock (Python)

Если вам не против немного пописать код, можно воспользоваться библиотекой http-server-mock на Python. Хотя это потребует написания некоторого кода, настройка остается довольно простой.

from http_server_mock import HttpServerMock
from flask import make_response

app = HttpServerMock(__name__)

@app.route("/", methods=["GET"])
def index():
    return make_response("Service Unavailable", 503)

with app.run("localhost", 80):
    pass

Этот код создает локальный сервер, который будет настраивать ответы с кодом состояния 503 при обращении к корневому пути.

3. Использование команды netcat (nc)

Как альтернатива, вы также можете использовать команду netcat, чтобы открыть TCP порт и отправлять данные по нему. Например, следующий командный файл позволит вам открывать порт и управлять ответами:

nc -l -p 80 -e echo "HTTP/1.1 503 Service Unavailable\r\n\r\n"

Это также даст вам возможность тестировать ваше приложение, возвращая конкретный HTTP код.

Заключение

Теперь у вас есть несколько решений для открытия TCP порта и возврата кодов ошибок HTTP. MockServer предлагает наиболее полный функционал, в то время как http-server-mock обеспечит минимальный объем кода, если вы согласны его написать. Выбор инструмента зависит от вашего уровня комфорта в программировании и от того, насколько сложный инструмент вы хотите использовать. Если вам необходимо только локальное тестирование, командные утилиты, такие как netcat, станут отличным выбором.

Оцените материал
Добавить комментарий

Капча загружается...