Microteam
Осваивающий
- Сообщения
- 74
- Репутация
- 34
Здравствуйте. Вот решил подружить AutoIt с WEB-сервером Apache2. За основу возьму платформу DENWER. Итак, AutoIt мы будем использовать в качестве CGI.
Устанавливаем Denwer (не буду описывать процесс его установки). Я выбрал стандартный путь: C:\WebServers (у вас он может быть другим), идём в папку куда установлен AutoIt (обычно: C:\Program Files\AutoIt3). Далее копируем файл AutoIt3.exe и папку Include, потом идём сюда: C:\WebServers\usr\local (не забываем что у вас путь к денверу может отличаться), и создаем там папку autoit3, и в созданной папке вставляем наши скопированные файлы.
Если у вас в данный момент включен денвер, обязательно выключите его.
Серверный скрипт AutoIt немного отличается от простого скрипта. Во первых директива:
Эта строчка, должна быть самой первой т.к., благодаря этой строчке Apache определяет путь к интерпретатору.
Далее, мы должны вывести в консоль(STDOUT поток) Mime тип контента. Вывод в консоль осуществляется с помощью функции:
т.к., мы будем выводить обычный html текст с кодировкой WINDOWS-1251, то мы указываем так:
HTTP заголовки от тела документа, разделяются одной пустой строкой, мы это также учли и в конце добавили @CRLF&@CRLF.
В итоге в начале каждого серверного скрипта, должны быть две строки:
Это неотъемлемая часть, любого серверного скрипта AutoIt. Только после указания этих строк, можно выполнять вывод. В противном случае сервер будет выдавать такую ошибку:
Давайте же, создадим наш первый серверный AutoIt скрипт, с таким содержанием:
И сохраним файл скрипта по пути: C:\WebServers\home\cgi-glob\test.au3
Запускаем денвер, и заходим сюда: http://localhost/cgi-glob/test.au3
Как видим вывелась, наша строка:
Если у вас всё получилось, то я поздравляю вас, вы написали свой серверный скрипт на AutoIt!
1. Заголовки
Итак, теперь разберёмся с окружением нашего серверного скрипта. Каждый браузер передаёт серверу заголовки, а тот уже передаёт их скрипту. Заголовки можно узнать, через функцию
Допустим, мы можем узнать наш браузер(User-Agent):
После выполнения скрипта, будет выведена строка User-Agent нашего браузера. К примеру, я пользуюсь Google Chrome и у меня User-Agent:
2. GET запрос
Многие из нас видели ссылки, такого типа: http://example.com/index.php?key=value
Так вот, все что после знака вопрос "?", это строка запроса (англ. Query String).
Это часть GET запроса. Сервер нам позволяет получить эту самую строку запроса, также через функцию EnvGet. Код:
Если мы уже к нашему URL добавим запрос, например: http://localhost/cgi-glob/test.au3?val=Hello_User
то мы получим в браузере такое:
Мы можем указывать несколько переменных в запросе, разделяя их амперсандом "&", примерно так: http://localhost/cgi-glob/test.au3?a=foo&b=bar ,но как говорит Каневский: "А это уже совсем другая история".
3. POST запрос.
Обработка POST запросов несколько отличается от GET запросов. Чтобы получить данные указанные в POST запросе, нам нужно считать их с STDIN потока, в AutoIt это делает функция:
Исходя из этого, POST запрос прочитать можно так:
Обратите внимание, что POST запросы не добавляются к URL, после знака вопрос "?", как это делают GET запросы, строка POST запроса храниться в заголовках, которые передаются серверу. Итак, конец теории, давайте же с вами напишем такой скрипт который будет получать POST запрос и обводить все вхождения слова "AutoIt" синим цветом, а буквы белым:
Список переменных окружений можно узнать тут:
http://angel07.webservis.ru/perl/env.html
DENWER находится тут: http://denwer.ru
Удачи!
Устанавливаем Denwer (не буду описывать процесс его установки). Я выбрал стандартный путь: C:\WebServers (у вас он может быть другим), идём в папку куда установлен AutoIt (обычно: C:\Program Files\AutoIt3). Далее копируем файл AutoIt3.exe и папку Include, потом идём сюда: C:\WebServers\usr\local (не забываем что у вас путь к денверу может отличаться), и создаем там папку autoit3, и в созданной папке вставляем наши скопированные файлы.
Если у вас в данный момент включен денвер, обязательно выключите его.
Серверный скрипт AutoIt немного отличается от простого скрипта. Во первых директива:
Код:
#!/usr/local/autoit3/autoit3
Далее, мы должны вывести в консоль(STDOUT поток) Mime тип контента. Вывод в консоль осуществляется с помощью функции:
Код:
ConsoleWrite();
т.к., мы будем выводить обычный html текст с кодировкой WINDOWS-1251, то мы указываем так:
Код:
ConsoleWrite("Content-Type: text/html; charset=WINDOWS-1251"&@CRLF&@CRLF);
HTTP заголовки от тела документа, разделяются одной пустой строкой, мы это также учли и в конце добавили @CRLF&@CRLF.
В итоге в начале каждого серверного скрипта, должны быть две строки:
Код:
#!/usr/local/autoit3/autoit3
ConsoleWrite("Content-Type: text/html; charset=WINDOWS-1251"&@CRLF&@CRLF);
Это неотъемлемая часть, любого серверного скрипта AutoIt. Только после указания этих строк, можно выполнять вывод. В противном случае сервер будет выдавать такую ошибку:
Код:
500 Internal Server Error
Давайте же, создадим наш первый серверный AutoIt скрипт, с таким содержанием:
Код:
#!/usr/local/autoit3/autoit3
ConsoleWrite("Content-Type: text/html; charset=WINDOWS-1251"&@CRLF&@CRLF);
ConsoleWrite("Hello from AutoIt");
И сохраним файл скрипта по пути: C:\WebServers\home\cgi-glob\test.au3
Запускаем денвер, и заходим сюда: http://localhost/cgi-glob/test.au3
Как видим вывелась, наша строка:
Код:
Hello from AutoIt
Если у вас всё получилось, то я поздравляю вас, вы написали свой серверный скрипт на AutoIt!
1. Заголовки
Итак, теперь разберёмся с окружением нашего серверного скрипта. Каждый браузер передаёт серверу заголовки, а тот уже передаёт их скрипту. Заголовки можно узнать, через функцию
Код:
EnvGet
Допустим, мы можем узнать наш браузер(User-Agent):
Код:
#!/usr/local/autoit3/autoit3
ConsoleWrite("Content-Type: text/html; charset=WINDOWS-1251"&@CRLF&@CRLF);
$user_agent = EnvGet('HTTP_USER_AGENT');
ConsoleWrite("Наш браузер: "&$user_agent);
После выполнения скрипта, будет выведена строка User-Agent нашего браузера. К примеру, я пользуюсь Google Chrome и у меня User-Agent:
Код:
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36
2. GET запрос
Многие из нас видели ссылки, такого типа: http://example.com/index.php?key=value
Так вот, все что после знака вопрос "?", это строка запроса (англ. Query String).
Это часть GET запроса. Сервер нам позволяет получить эту самую строку запроса, также через функцию EnvGet. Код:
Код:
#!/usr/local/autoit3/autoit3
ConsoleWrite("Content-Type: text/html; charset=WINDOWS-1251"&@CRLF&@CRLF);
$var = EnvGet('QUERY_STRING');
ConsoleWrite("Строка запроса: "&$var);
Если мы уже к нашему URL добавим запрос, например: http://localhost/cgi-glob/test.au3?val=Hello_User
то мы получим в браузере такое:
Код:
Строка запроса: val=Hello_User
Мы можем указывать несколько переменных в запросе, разделяя их амперсандом "&", примерно так: http://localhost/cgi-glob/test.au3?a=foo&b=bar ,но как говорит Каневский: "А это уже совсем другая история".
3. POST запрос.
Обработка POST запросов несколько отличается от GET запросов. Чтобы получить данные указанные в POST запросе, нам нужно считать их с STDIN потока, в AutoIt это делает функция:
Код:
ConsoleRead();
Исходя из этого, POST запрос прочитать можно так:
Код:
#!/usr/local/autoit3/autoit3
ConsoleWrite("Content-Type: text/html; charset=WINDOWS-1251"&@CRLF&@CRLF);
$var = ConsoleRead()
ConsoleWrite("Строка POST запроса: "&$var);
Обратите внимание, что POST запросы не добавляются к URL, после знака вопрос "?", как это делают GET запросы, строка POST запроса храниться в заголовках, которые передаются серверу. Итак, конец теории, давайте же с вами напишем такой скрипт который будет получать POST запрос и обводить все вхождения слова "AutoIt" синим цветом, а буквы белым:
Код:
#!/usr/local/autoit3/autoit3
ConsoleWrite("Content-Type: text/html; charset=windows-1251"&@CRLF&@CRLF);
$method = EnvGet('REQUEST_METHOD') ; Узнаем метод запроса GET или POST
$path = EnvGet('SCRIPT_NAME'); Узнаем HTTP-путь к текущему скрипту
$uri = 'http://'&EnvGet('SERVER_NAME')&$path ; Тут мы получаем полный URI к текущему скрипту
; Если метод POST то читаем данные из STDIN потока
If $method = "POST" Then
$POST = ConsoleRead();
EndIf
; Код на HTML
ConsoleWrite('<!DOCTYPE html>'&@CRLF)
ConsoleWrite('<html><head><meta http-equiv="Content-Type: text/html; charset=WINDOWS-1251"><title>Приожение на AutoIt!</title></head><body>')
ConsoleWrite('<form action="'&$uri&'" method="POST">Введите текст:
<textarea name="text">This is AutoIt script. AutoIt is subtle</textarea>
<input type="submit" value="Отправить!"></form>');
; Если POST запрос, то мы его обрабатываем
if IsDeclared("POST") Then
$POST = StringRegExpReplace($POST, '^text=', '');
$POST = StringReplace($POST, "+", " ")
$POST = StringReplace($POST, "autoit", "<span style='background: blue;color:white;'>AutoIt</span>")
ConsoleWrite("Обработанный текст: "&$POST);
EndIf
ConsoleWrite('</body></html>');
Список переменных окружений можно узнать тут:
http://angel07.webservis.ru/perl/env.html
DENWER находится тут: http://denwer.ru
Удачи!