Что нового

[Сеть, интернет] Http SC - Http сервер на AutoIt

Astel064

Помог мой пост, ставь +!
Сообщения
271
Репутация
49
Версия AutoIt
3.3.6.1
Версия
1.0.20.52
AutoIt: 3.3.6.1 & 3.3.8.1+
Версия: 1.0 (20:52 14.10.2017)

Категория: Интернет, Сеть

Описание: Функции для легкого создания HTTP сервера на AutoIt3

Код/Пример:
Код:
AutoItSetOption("MustDeclareVars", 1)

#include "Http SC.inc"
#include "Http SC Error.inc"
#include "GelAllIp.au3"

; Объявляем переменные
Global $aServer, $vSendData, $aBanList, $hOptimizationTimer, $fWhile

; Создаем сервер
$aServer = _HttpSC_CreateServer($aBanList, "127.0.0.1", 8080, "My server", 0, @ScriptDir&"\My Server.log")
    If @Error Then Exit MsgBox(16, "CreateServer", _HttpSCError_ConvertError2Text(@Error, @Extended, True)); Ошибка

; Настраиваем сервер
_HttpSC_ConfigServer($aServer, 20, 2, 100)
    If @Error Then
    MsgBox(16, "ConfigServer", _HttpSCError_ConvertError2Text(@Error, @Extended, True)); Ошибка
    _HttpSC_DeleteServer($aServer, $aBanList)
    Exit 2
    EndIF

; Запускаем сервер
_HttpSC_StartServer($aServer, $aBanList)
    If @Error Then
    MsgBox(16, "StartServer", _HttpSCError_ConvertError2Text(@Error, @Extended, True)); Ошибка
    _HttpSC_DeleteServer($aServer, $aBanList)
    Exit 3
    EndIF

; Выводим уведомление
MsgBox(0,"StartServer","Сервер запущен. IP сервера: 127.0.0.1; порт сервера: 8080. Нажмите F1 для выхода!", 5)
$fWhile = 1
HotKeySet("{F1}", "_Exit")
$hOptimizationTimer = TimerInit();  Таймер оптимизации сервера

While $fWhile
    _HttpSC_ServerHandler($aServer, $aBanList, "_GetServerFile", "_Post", "_OtherReqest", "")
    Sleep(250)
    If TimerDiff($hOptimizationTimer) >= 10*60*1000 Then;           10*60*1000 = 10 мин. * 60 сек. * 1000 мсек.
        _HttpSC_ServerOptimization($aServer, 1);            Принудительная оптимизация
        $hOptimizationTimer = TimerInit();          Устанавливаем новый таймер
    EndIF
Wend


HotKeySet("{F1}")

; Останавливаем и удаляем сервер
_HttpSC_DeleteServer($aServer, $aBanList)
    If @Error Then MsgBox(16, "DeleteServer", _HttpSCError_ConvertError2Text(@Error, @Extended, True)); Ошибка
Exit



; Функция обработки GET запроса
Func _GetServerFile($sUrl, $hUserSocket, $sUserIp, $sHttpVer, $Reqest)
    If $sUrl = "/" Then
    $vSendData = '<head>'&@CRLF
    $vSendData &= '<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">'&@CRLF
    $vSendData &= '<title>HttpSC</title>'&@CRLF
    $vSendData &= '</head>'&@CRLF
    $vSendData &= '<p align="center"><font size="5"><b>HttpSC</b></font></p>'&@CRLF
    $vSendData &= '<p align="left"><font size="3">Состояние: Успех</font></p>'&@CRLF
    $vSendData &= '<p align="left"><font size="3">Дата: '&@MDAY&"/"&@MON&"/"&@YEAR&'</font></p>'&@CRLF
    $vSendData &= '<p align="left"><font size="3">Время: '&@HOUR&":"&@MIN&":"&@SEC&'</font></p>'&@CRLF
    $vSendData &= ' <form name="form1" method="post" action="post.php">'&@CRLF
    $vSendData &= ' Введите текст:
'&@CRLF
    $vSendData &= ' <textarea name="text" cols="80" rows="10"></textarea>'&@CRLF
    $vSendData &= ' <input name="line"></input>'&@CRLF
    $vSendData &= ' <input name="" type="submit" value="Отправить"/>'&@CRLF
    $vSendData &= ' </form>'&@CRLF
    $vSendData = _HttpSC_CreateAnswer($aServer, $vSendData, "HTTP/1.1", "200 Ok",  _HttpSC_ConvertLastModifiedTime(@YEAR&"/"&@MON&"/"&@MDAY&' '&@HOUR&":"&@MIN&":"&@SEC), "text/html", "")
    Return $vSendData
    Else
    $vSendData = '<head>'&@CRLF
    $vSendData &= '<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">'&@CRLF
    $vSendData &= '<title>HttpSC</title>'&@CRLF
    $vSendData &= '</head>'&@CRLF
    $vSendData &= '<p align="center"><font size="5"><b>HttpSC</b></font></p>'&@CRLF
    $vSendData &= '<p align="left"><font size="3">Состояние: Ошибка 404</font></p>'&@CRLF
    $vSendData &= '<p align="left"><font size="3">Дата: '&@MDAY&"/"&@MON&"/"&@YEAR&'</font></p>'&@CRLF
    $vSendData &= '<p align="left"><font size="3">Время: '&@HOUR&":"&@MIN&":"&@SEC&'</font></p>'&@CRLF
    $vSendData = _HttpSC_CreateAnswer($aServer, $vSendData, "HTTP/1.1", "401 Unauthorized",  "", "text/html", "", "")
    Return $vSendData
    EndIF
EndFunc


Func _OtherReqest($hUserSocket, $sUserIp, $Reqest)
Return ""
EndFunc


Func _Post($sUrl, $hUserSocket, $sUserIp, $sHttpVer, $Reqest)
    $vSendData = '<head>'&@CRLF
    $vSendData &= '<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">'&@CRLF
    $vSendData &= '<title>HttpSC</title>'&@CRLF
    $vSendData &= '</head>'&@CRLF
    $vSendData &= '<p align="center"><font size="5"><b>HttpSC</b></font></p>'&@CRLF
    $vSendData &= '<p align="left"><font size="3">Состояние (POST): 200 Успех</font></p>'&@CRLF
    $vSendData &= '<p align="left"><font size="3">Дата: '&@MDAY&"/"&@MON&"/"&@YEAR&'</font></p>'&@CRLF
    $vSendData &= '<p align="left"><font size="3">Время: '&@HOUR&":"&@MIN&":"&@SEC&'</font></p>'&@CRLF
    $vSendData &= '<p align="left"><font size="3">POST данные запроса: </br>'&_HttpSC_PostReqestGetData($Reqest)&'</font></p>'&@CRLF
    $vSendData = _HttpSC_CreateAnswer($aServer, $vSendData, "HTTP/1.1", "200 OK",  "", "text/html", "")
    Return $vSendData
EndFunc


Func _Exit()
$fWhile = 0
EndFunc

Файл: Прикреплен к сообщению. Зеркало: *тык*

Список функций:
_HttpSC_CreateServer = Создает HTTP сервер

_HttpSC_ConfigServer = Задает дополнительные настройки сервера

_HttpSC_StartServer = Запускает HTTP сервер (создает на указанных IP адресах сокеты для входящих подключений)

_HttpSC_StopServer = Останавливает HTTP сервер (удаляет все созданные сокеты на указанных IP адресах, а также отключает всех
подключенных пользователей)

_HttpSC_DeleteServer = Удаляет HTTP сервер (но перед этим выполняет функцию _HttpSC_StopServer)

_HttpSC_ServerHandler = Главный обработчик сервера: подключает пользователей, передает данные, управляет блокировкой пользователя

_HttpSC_ServerOptimization = Оптимизирует данные сервера для более быстрой работы

_HttpSC_ServerCheckIp = Проверяет, создан-ли сокет на указанном IP адресе (или на нескольких указанных в массиве IP адресах)

_HttpSC_CreateAnswer = Возвращает полный ответ (вместе с заголовком) для последующей отправки клиенту

_HttpSC_CreateBigFileAnswer = Функция используется для отправки файлов большого размера: Возвращает полный ответ (вместе с заголовком)
для последующей отправки клиенту

_HttpSC_FileGetMimeType = Возвращает MIME тип данных, полагаясь на расширение указанного файла

_HttpSC_ConvertLastModifiedTime = Конвертирует указанное время для параметра $aLastModified (функция _HttpSC_CreateAnswer

_HttpSC_ReqestParse = Получает данные для указанного заголовка полученного от клиента запроса

_HttpSC_BasicAuthenticate_GetData = Возвращает логин и пароль BASIC авторизации из указанного запроса

_HttpSC_PostReqestGetData = Получает данные указанного POST запроса полученного от клиента

_HttpSC_WhileList_Add = Добавляет в белый список (не блокируемые IP адреса) указанные IP адреса (или 1 IP адрес)

_HttpSC_WhileList_Del = Удаляет из белого списока (не блокируемые IP адреса) указанные IP адреса (или 1 IP адрес)

_HttpSC_ServerGet_BannedUsersIp = Получает список IP адресов заблокированных пользователей

_HttpSC_ServerGet_ConnUsers = Получает список сокетов и IP адресов подключенных к серверу клиентов

_HttpSC_ServerGet_ServerSockets = Получает список IP адресов и сокетов сервера, открытых для входящих подключений

__HttpSC_Encoding_URIDecode = Декодирует URL адрес

_HttpSCError_ConvertError2Text = Преобразует код ошибки в ее описание


Коментарий автора:
• Имеется файл справки Http SC.chm
• Вы имеете полное право использовать данную UDF в любых, не запрещенных законодательством целях. Вы имеете полное право вносить поправки, удалять/изменять/добавлять функции UDF на свое усмотрение. Единственная просьба: указывайте, что автор Astel064, а редактор Вы; также указывайте свою версию редактирования отдельно от моей!

История версий:
20:52 14.10.2017 - 1.0

UPD 06/10/2020: Почему-то слетела ссылка на скачивание UDF, поправил...
 
Автор
Astel064
Источник
Ссылка на источник

Вложения

Последнее редактирование:

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
На первый взгляд неплохо, для более детального анализа нужно тестировать.
Однако хорошая справка, это процентов шестьдесят-семьдесят успеха!
Отдельный плюс за справку, это тот момент который многие игнорируют (и я в том числе :().
:beer:
 

SECTOR

Продвинутый
Сообщения
399
Репутация
59
Ссылка нерабочая :sad:
 
Верх