Написание прокси / кеширующего сервера с использованием Lua! - PullRequest
0 голосов
/ 04 февраля 2011

Я все еще начинаю с Lua и хотел бы написать (относительно) простой прокси, используя его.

Это то, что я хотел бы получить:

  1. Прослушивание порта.
  2. Принять соединение.
  3. Поскольку это прокси, я ожидаю HTTP (Получить / Опубликовать и т. Д.) / HTTPS / FTP / любые запросы от моего браузера.
  4. Проверка запроса (просто для извлечения информации о хосте и порте?)
  5. Создайте новый сокет и подключитесь к хосту, указанному в запросе.
  6. Передача точного запроса в том виде, в котором он был получен, с данными POST и всеми.
  7. Получить ответ (заголовок / тело / что-нибудь еще ..) и ответить на первоначальный запрос.
  8. Закрыть соединения? Я полагаю, что Keep-Alive не следует уважать?

Я понимаю, что это не должно быть тривиально, но у меня много проблем с настройкой с помощью LuaSockets или Copas - как мне получить весь запрос? Продолжать получать, пока я не отсканирую \ r \ n \ r \ n? Тогда как мне вытащить данные поста? а тело? Или принять файл "скачать"? Я читал о «раковине», но, по общему признанию, не понимал большую часть того, что это значило, так что, может быть, мне стоит прочитать об этом больше?

В случае, если это имеет значение, я работаю на машине с Windows, использую LuaForWindows и все еще довольно плохо знаком с Lua. Люблю это до сих пор, хотя таблицы просто потрясающие:)

Я обнаружил lua-http, но, похоже, он был объединен с Xavante (и я не нашел никакой версии для lua 5.1 и LuaForWindows), не уверен, облегчит ли это мне жизнь?

Заранее спасибо за любые советы, указатели, библиотеки / источники, на которые я должен обратить внимание, и т. Д .:)

Ответы [ 2 ]

0 голосов
/ 04 февраля 2011

Вы можете попробовать использовать lua-http-parser .

0 голосов
/ 04 февраля 2011

Не так просто, как вы думаете. Запросы к прокси и запросы к серверам разные. В rfc2616 вы можете видеть, что при запросе прокси клиент включает абсолютный URL запрашиваемого документа вместо обычного относительного.

Таким образом, в качестве прокси-сервера вы должны анализировать входящие запросы, изменять их, запрашивать соответствующие серверы и возвращать ответ.

Анализ входящих запросов довольно сложен, поскольку длина тела зависит от различных параметров (метод, кодировка содержимого и т. Д.).

...