浅谈CGI

虽说目前的web服务基本上都是基于前后端解耦的各种框架进行开发,之前学head first servlet这本书的时候甚至看到作者当时(十年前)就说CGI技术已经比较落后了

但是目前看到有好些物联网设备都是使用CGI技术的,所以可以了解一下,实际上跟servlet有一些相似之处。

以网上现成的例子(https://blog.csdn.net/no_pao_spite/article/details/73188241)举例:

html前端

<html>
    
    <head>
        <TITLE>CGI1:hello CGI</TITLE>
    </head>
   
     
    <body>    
 
 
        <form action="cgi-bin/cgi_add.cgi">   //这里非常像servlet吧,这个表单的action是请求到了下文的cgi
        <p> 请在下面填入数A 和 数B,按下确定后,可以获得二数相加的结果<br>
        A:<input name="num_a"  size="5"/>
        B:<input name="num_b"  size="5"/><br>
        Result:<input name="result" size="10"><br>
        <input type="submit" value="OK">
        </form>    
    </body>
    
</html>

cgi程序
#include <stdio.h>  
#include <stdlib.h>  
int main(void)  
{  
    char *data;  
    long m,n;  
    printf("%s ","Content-Type:text/html;charset=gb2312\r\n\r\n");  //必须要有这一部分,指定了编码和内容类型
    printf("<title>add result</title> ");  
    printf("<h3>add result</h3> ");  
    data = getenv("QUERY_STRING");  //以环境变量QUERY_STRING传参,实现前后端交互
    if(data == NULL)  
        printf("<P>error:no data receive");  
    else if(sscanf(data,"%*[^=]= %ld& %*[^=] =%ld& %*[^=]=",&m,&n)!=2)  //使用sscanf函数从data这个字符串中读取到点击提交按钮所下发的数A和数B的值
        printf("<P>error:must be number");     //正则判断的意思是取到等号后的数值,等号后有空格时忽略空格
    else  
        printf("<P>%ld + %ld=%ld",m,n,m+n);  
    return 0;  
}  

是的,CGI确实挺麻烦的,要自己从底层开始写起,所以后面被取代了,但在性能受限的iot设备上,cgi则成为了经济实惠的选择,这使得我们不得不去了解它。以上

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
粤ICP备20015830号