Форум

/ домой \ \ темы /



Тема: bat-файл в качестве CGI

02/03/2007 19:42 JlblC2:
Пишу такой батник:

@echo off
echo Content-type: text/html
echo.
echo.
echo пингую вас... %REMOTE_ADDR%
ping.exe -a -n 1 %REMOTE_ADDR%

вызываю его
<!--#exec cgi="1ping.bat" -->

все работает хорошо, только вывод Ping (и других прог)
в dos-кодировке
можно-ли что-нибудь сделать?


03/03/2007 01:47 Max:
Так пишите текст в той кодировке в которой вы хотите его чтобы он выводился.
если внутри самого пинга есть текст в досовской кодировке, то можно только отредактировать бинарный файл, -- найти все русские слова и заменить их. Или возьмите ping от английских виндов.
Сервер сам не будет перекодировать, но можно запусстить через скрипт который будет перекодировать выывод.
02/03/2008 02:46 Byuik:
Max: научи пожалуйста как написать EXE приложение для CGI
Ну ламмер я не знаю как это зделать...
02/03/2008 20:54 Max:
Это обычное консольное или даже GUI приложение. GUI функции использовать смысла нет. Но скомпилировано оно может быть как GUI.
Вы можете писать выходной поток, например сишной функцией printf -- и это передается в браузер пользователя. Хотите использовать Win API -- Получите стандартные хендлы с помощью GetStdHandle и пишите/читайте через WriteFile/ReadFile
Получить переменную окружения можно API функцией GetEnviromentString
В остальном суть получения запроса, возврата страницы такая же как в любом привычном для вас CGI-приложении. В интернете есть множество примеров и на Си и порядок обмена данными вы можете посмотреть в перловых скриптах.

03/03/2008 02:30 Byuik:
Max о спасибо , я разобрался , теперь могу писать очень быстрые и оригинальные CGI для WIN серверов.
Ещё раз большое спасибо.
27/02/2009 17:47 Talker:
Здравствуйте!
Простите ламера, подскажите про CGI - я так понял в принципе CGI-скриптами могут выступать и BAT-файлы и обычные консольные EXE-шники.
2 ламерских вопроса:
1. нужно ли им менять расширение на .CGI?
2. что писать в адресной строке чтобы вызвать на исполнение написанный CGI-скрипт (bat-ник)?

Я в каталог \cgi-bin\ положил файл 1.bat с содержимым: "echo HELLO!"
пишу в адресной строке Оперы: "localhost/cgi-bin/1.bat", получаю просто чистое белое окно
Если 1.bat положить скажем в корень (C:\shttps\www\), то Опера просто предлагает скачать файл.

Подскажите, пожалуйста как сделать чтобы 1.bat запустился как CGI-скрипт?
27/02/2009 17:48 Talker:
пишу в адресной строке Оперы: "localhost / cgi-bin / 1.bat"
27/02/2009 22:16 Zhenia:
переименовывать не надо

должно быть так
@echo off
echo Content-type: text/plain
echo (пустая строка обязательно!)
echo HELLO!

Не помню как пустая строка делается,просто есно не работает, но смысл такой.
27/02/2009 22:43 Zhenia:
Вспомнил , чтоб была пустая строка, надо после эхо писать точку(ECHO.)
28/02/2009 00:21 Tester:
JlblC2, можно поставить в .htm откуда вызываешь строку
<META http-equiv="content-type"; content="text/html; charset=CP866">.

Или в самом bat-файле сменить кодировку: "chcp 1251" или какая она там у тебя. Кстати, проблема в нехватке знаний та же, что и у Talker'a. Гуглил, но примеров запуска батника как cgi не нашлось.

Так что присоединяюсь к вопросу. Если вызвать 1.bat через html (<!--#exec cgi="1.bat" -->), тоже имеем просто чистый экран.
02/03/2009 09:25 Talker:

13/03/2009 15:13 Max:
При запуске тегом <!--#exec cgi= сервер подставляет подкаталог образованный из cgi идентификатора.
Вы можете использовать <!--#exec cmd= или <!--#include virtual= -- если включаемый файл идентифицируется как CGI
13/03/2009 21:18 Tester:
Кажется, разобрался. Talker, чистое белое окно как раз означает, что скрипт запустился успешно. В моем случае подлость заключалась в том, что в строку "echo. " закрался пробел после точки, или какой-то символ переноса. При прямом копировании из браузера он появляется.

test.bat:

@echo off
echo Content-type: text/html
echo.
echo Привет.

Запуск Link temporary removed соответственно.

Пользователь: Пароль: Новый пользователь:   Запомнить пароль: