foxpro web 开发原理(二)
上次发帖探讨了一下web开发的原理,很多人感兴趣,那么我们就继续探讨一下。deepseek 提供的代码,编译后运行有问题,一直报错502.2,deepseek也一直解决不了,没办法,只好上网继续搜索相关内容。
最后,只好退而求其次,找到其他的语言,再设法翻译成foxpro,好在懂一点点visual basic,参考VB代码,改编了foxpro代码,编译运行后果然成功了。。。
现附上代码,以作抛砖引玉之功效:

* 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" * 主程序 CLEAR SET TALK OFF SET CONSOLE OFF * 获取标准输入输出句柄 hStdIn = GetStdHandle(STD_INPUT_HANDLE) hStdOut = GetStdHandle(STD_OUTPUT_HANDLE) * 调试用暂停(如果需要) * [color=#808080]=Sleep(60000) && 暂停60秒等待调试器附加[/color] * 读取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 World!" + lcValue * 发送响应 lnBytesWritten = 0 =WriteFile(hStdOut, lcResponse, LEN(lcResponse), @lnBytesWritten, 0) * 清理 CLEAR DLLS RETURN
运行后效果如下: