在我们的CGI程序能解释脚本之前,我们对control.exe进行升级,验证一下可行性:
1,对请求的路径进行验证检查,并给出不同响应
2,对POST和GET请求做出不同的响应
代码如下,已编译通过:
程序代码:
服务器上并没有sample1.fpx,所以IIS返回如下:
1,对请求的路径进行验证检查,并给出不同响应
2,对POST和GET请求做出不同的响应
代码如下,已编译通过:

* CGI处理示例 * 定义 Windows API 常量 #DEFINE STD_INPUT_HANDLE -10 #DEFINE STD_OUTPUT_HANDLE -11 * 声明 Windows API DECLARE Sleep IN kernel32 INTEGER dwMilliseconds DECLARE INTEGER GetStdHandle IN kernel32 INTEGER nStdHandle DECLARE INTEGER ReadFile IN kernel32 ; INTEGER hFile, ; STRING @lpBuffer, ; INTEGER nNumberOfBytesToRead, ; INTEGER @lpNumberOfBytesRead, ; INTEGER lpOverlapped DECLARE INTEGER WriteFile IN kernel32 ; INTEGER hFile, ; STRING lpBuffer, ; INTEGER nNumberOfBytesToWrite, ; INTEGER @lpNumberOfBytesWritten, ; INTEGER lpOverlapped * CGI 环境变量常量 CGI_CONTENT_LENGTH = "CONTENT_LENGTH" cmethod=GETENV("REQUEST_METHOD") * 主程序 CLEAR SET TALK OFF SET CONSOLE OFF * 获取标准输入输出句柄 hStdIn = GetStdHandle(STD_INPUT_HANDLE) hStdOut = GetStdHandle(STD_OUTPUT_HANDLE) * 调试用暂停(如果需要) * [color=#808080]=Sleep(6000) && 暂停60秒等待调试器附加[/color] DO CASE CASE cmethod="POST" * 读取POST内容 lcContentLength = GETENV(CGI_CONTENT_LENGTH) lnContentLength = VAL(lcContentLength) IF lnContentLength > 0 * 准备缓冲区 lcReadBuffer = REPLICATE(CHR(0), lnContentLength) lnBytesRead = 0 * 读取输入 =ReadFile(hStdIn, @lcReadBuffer, lnContentLength, @lnBytesRead, 0) lcReadBuffer = LEFT(lcReadBuffer, lnBytesRead) * 解析参数 lnPos = AT("=", lcReadBuffer) IF lnPos > 0 lcValue = SUBSTR(lcReadBuffer, lnPos + 1) ELSE lcValue = lcReadBuffer ENDIF ELSE lcValue = "" ENDIF * 构建响应 lcResponse = "HTTP/1.0 200 OK" + CHR(13) + CHR(10) + ; "Content-Type: text/html" + CHR(13) + CHR(10) + ; CHR(13) + CHR(10) + ; "Hello " + lcValue CASE cmethod="GET" cpath=GETENV("PATH_TRANSLATED") cquerystr=GETENV("QUERY_STRING") IF FILE(cpath) * 构建响应 lcResponse = "HTTP/1.0 200 OK" + CHR(13) + CHR(10) + ; "Content-Type: text/html" + CHR(13) + CHR(10) + ; CHR(13) + CHR(10) + ; "请求路径为: " + cpath+"<br>"+; "请求参数为:" +IIF(EMPTY(cquerystr),"没有参数!",cquerystr) ELSE lcResponse = "HTTP/1.0 200 OK" + CHR(13) + CHR(10) + ; "Content-Type: text/html" + CHR(13) + CHR(10) + ; CHR(13) + CHR(10) + ; "错误:请求的脚本不存在或已删除!" ENDIF OTHERWISE lcResponse = "HTTP/1.0 200 OK" + CHR(13) + CHR(10) + ; "Content-Type: text/html" + CHR(13) + CHR(10) + ; CHR(13) + CHR(10) + ; "错误:目前只支持GET和POST方法!" ENDCASE * 发送响应 lnBytesWritten = 0 =WriteFile(hStdOut, lcResponse, LEN(lcResponse), @lnBytesWritten, 0) * 清理 CLEAR DLLS RETURN
服务器上并没有sample1.fpx,所以IIS返回如下: