Автор Тема: AutoIt на WEB-сервере  (Прочитано 6223 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Maalik [?]

  • Осваивающий
  • **
  • Сообщений: 74
  • Репутация: 33
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
AutoIt на WEB-сервере
« Создано: Июль 03, 2013, 11:47:57 »
Здравствуйте. Вот решил подружить AutoIt с WEB-сервером Apache2. За основу возьму платформу DENWER. Итак, AutoIt мы будем использовать в качестве CGI.

Устанавливаем Denwer (не буду описывать процесс его установки). Я выбрал стандартный путь: C:\WebServers (у вас он может быть другим), идём в папку куда установлен AutoIt (обычно: C:\Program Files\AutoIt3). Далее копируем файл AutoIt3.exe и папку Include, потом идём сюда: C:\WebServers\usr\local (не забываем что у вас путь к денверу может отличаться), и создаем там папку autoit3, и в созданной папке вставляем наши скопированные файлы.

Если у вас в данный момент включен денвер, обязательно выключите его.

Серверный скрипт AutoIt немного отличается от простого скрипта. Во первых директива:
#!/usr/local/autoit3/autoit3
Эта строчка, должна быть самой первой т.к., благодаря этой строчке Apache определяет путь к интерпретатору.

Далее, мы должны вывести в консоль(STDOUT поток) Mime тип контента. Вывод в консоль осуществляется с помощью функции:
Код: AutoIt [Выделить]

т.к., мы будем выводить обычный html текст с кодировкой WINDOWS-1251, то мы указываем так:
Код: AutoIt [Выделить]
ConsoleWrite("Content-Type: text/html; charset=WINDOWS-1251"&@CRLF&@CRLF);
 


HTTP заголовки от тела документа, разделяются одной пустой строкой, мы это также учли и в конце добавили @CRLF&@CRLF.

В итоге в начале каждого серверного скрипта, должны быть две строки:
Код: AutoIt [Выделить]
#!/usr/local/autoit3/autoit3
ConsoleWrite("Content-Type: text/html; charset=WINDOWS-1251"&@CRLF&@CRLF);
 


Это неотъемлемая часть, любого серверного скрипта AutoIt. Только после указания этих строк, можно выполнять вывод. В противном случае сервер будет выдавать такую ошибку:
500 Internal Server Error
Давайте же, создадим наш первый серверный AutoIt скрипт, с таким содержанием:
Код: 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. Заголовки
Итак, теперь разберёмся с окружением нашего серверного скрипта. Каждый браузер передаёт серверу заголовки, а тот уже передаёт их скрипту. Заголовки можно узнать, через функцию
Код: AutoIt [Выделить]
Допустим, мы можем узнать наш браузер(User-Agent):
Код: AutoIt [Выделить]
#!/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. Код:
Код: AutoIt [Выделить]
#!/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 это делает функция:
Код: AutoIt [Выделить]

Исходя из этого, POST запрос прочитать можно так:
 
Код: AutoIt [Выделить]
#!/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" синим цветом, а буквы белым:
Код: 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">Введите текст:<br /> <textarea name="text">This is AutoIt script. AutoIt is subtle</textarea><br /><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

Удачи!
« Последнее редактирование: Июль 03, 2013, 12:11:26 от Maalik »

Русское сообщество AutoIt

AutoIt на WEB-сервере
« Отправлен: Июль 03, 2013, 11:47:57 »

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 4003
  • Репутация: 960
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: AutoIt на WEB-сервере
« Ответ #1, Отправлен: Июль 03, 2013, 17:55:25 »
Плохо одно, AutoIt на сервера не ставят ;D

Скорблю и помню.




Оффлайн Jan-Jak [?]

  • Новичок
  • *
  • Сообщений: 41
  • Репутация: 1
  • Пол: Мужской
    • Награды
Re: AutoIt на WEB-сервере
« Ответ #2, Отправлен: Июль 03, 2013, 22:03:32 »
я бы на свой поставил. но у меня IIS на Windows server 2008 r2.

Оффлайн alex33 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1417
  • Репутация: 176
  • Пол: Мужской
    • alekssamos ВКонтакте
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: AutoIt на WEB-сервере
« Ответ #3, Отправлен: Июль 24, 2014, 12:03:06 »
У меня всё заработало. Я скомпилировал в exe как консольное приложение и у меня тоже всё заработало.


Maalik  [?]
Цитировать
идём в папку куда установлен AutoIt (обычно: C:\Program Files\AutoIt3). Далее копируем файл AutoIt3.exe и папку Include, потом идём сюда: C:\WebServers\usr\local (не забываем что у вас путь к денверу может отличаться), и создаем там папку autoit3, и в созданной папке вставляем наши скопированные файлы.
А можно и не переносить, просто указать путь к установленному AutoIt. Я написал
Код: AutoIt [Выделить]
#!C:/Program Files/AutoIt3/AutoIt3

и у меня тоже всё заработало...

Русское сообщество AutoIt

Re: AutoIt на WEB-сервере
« Ответ #3 Отправлен: Июль 24, 2014, 12:03:06 »

Оффлайн Olim98 [?]

  • Новичок
  • *
  • Сообщений: 48
  • Репутация: 2
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: AutoIt на WEB-сервере
« Ответ #4, Отправлен: Август 02, 2014, 21:41:58 »
Плохо одно, AutoIt на сервера не ставят ;D
Два плохо) AutoIt не самый быстрый язык, а для серверов, особенно высоко-нагруженных это не приемлемо. но за статейку спасибо

Оффлайн alex33 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1417
  • Репутация: 176
  • Пол: Мужской
    • alekssamos ВКонтакте
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: AutoIt на WEB-сервере
« Ответ #5, Отправлен: Август 02, 2014, 23:07:41 »
AutoIt не самый быстрый язык, а для серверов, особенно высоко-нагруженных это не приемлемо.
Ну для какого-нибудь офиса / в какую-нибудь локальную сеть можно я думаю запустить... :)

Оффлайн Olim98 [?]

  • Новичок
  • *
  • Сообщений: 48
  • Репутация: 2
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: AutoIt на WEB-сервере
« Ответ #6, Отправлен: Август 15, 2014, 21:30:17 »
Если кто нить знает OpenServer, измените пжл пути под него. Я сам что то не смог разобраться :(

UPD: Уже сам разобрался, во-первых вместо #!/usr/local/autoit3/autoit3 вначале скрипта пишем #!(ПОЛНЫЙ ПУТЬ К AUTOIT C НАЗВАНИЕМ ФАЙЛА БЕЗ РАСШИРЕНИЯ), например #!C:/Program Files/AutoIt3/AutoIt3. А во-вторых сам скрипт кидаем в папку /OpenServer/domains/localhost/cgi-bin, проходим по ссылке http://localhost/cgi-bin/test.au3 и наслаждаемся шедевром :beer: ;D
« Последнее редактирование: Август 15, 2014, 22:42:21 от Olim98, Причина: UPD »

Русское сообщество AutoIt

Re: AutoIt на WEB-сервере
« Ответ #6 Отправлен: Август 15, 2014, 21:30:17 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
3 Ответов
6784 Просмотров
Последний ответ Май 05, 2015, 10:08:00
от tov-jukov
3 Ответов
3115 Просмотров
Последний ответ Январь 13, 2012, 22:10:17
от ynbIpb
9 Ответов
3974 Просмотров
Последний ответ Июнь 05, 2011, 01:21:48
от CreatoR
3 Ответов
2308 Просмотров
Последний ответ Апрель 15, 2013, 11:46:44
от DarWiM
0 Ответов
1837 Просмотров
Последний ответ Июль 03, 2013, 18:03:17
от Garrett
7 Ответов
2102 Просмотров
Последний ответ Февраль 24, 2014, 14:30:25
от winstan
1 Ответов
3602 Просмотров
Последний ответ Апрель 22, 2014, 18:10:41
от maximax
3 Ответов
1131 Просмотров
Последний ответ Август 22, 2016, 04:21:08
от Des
0 Ответов
442 Просмотров
Последний ответ Июль 26, 2017, 18:54:58
от vitaliy4us
2 Ответов
485 Просмотров
Последний ответ Октябрь 12, 2017, 13:37:16
от iltmpz