发 帖  

[经验] 第46章 RL-TCPnet中CGI脚本使用方法

2018-1-9 15:50:35  1585
收藏 1 收藏 推荐 0 推荐
分享
转帖
本章节为大家讲解RL-TCPnet中CGI的实现方法,特别是具体的执行过程说明。关于这点非常有必要讲解下,否则后面学习了CGI也是云里雾里。
46.1 初学者重要提示
46.2 CGI实现动态HTML
46.3 Web网页的数据输入方法
46.4 CGI的POST数据输入方法
46.5 CGI的GET数据输入方法
46.6      总结

评分

参与人数 1积分 +5 收起 理由
star_66666 + 5 资源分享达人,加分鼓励!

查看全部评分

lee_st 2018-1-12 10:07:53
46.1  初学者重要提示
1、学习本章节前,务必优先学HTML表单,非常非常重要。已经整理在这个帖子中,由于有不是我们创作的内容,就不往教程里面整理了 。

评分

参与人数 1积分 +5 收起 理由
star_66666 + 5 资源分享达人,加分鼓励!

查看全部评分

回复

举报

lee_st 2018-1-12 10:08:15
2、CGI是HTTP和C代码通信的桥梁。基于此,客户端浏览器和Web服务器的互动才得以实现。

评分

参与人数 1积分 +5 收起 理由
star_66666 + 5 资源分享达人,加分鼓励!

查看全部评分

回复

举报

lee_st 2018-1-12 10:08:37
46.2  CGI实现动态HTML
      通过前面章节HTML的学习,我们了解到使用HTML仅仅可以制作一个静态网页,需要实现服务器和客户端的互动得需要CGI的加入。CGI属于一种脚本语言,加入到HTML中也比简单,仅需要下面五条指令,放在HTML语句前面即可:

评分

参与人数 1积分 +5 收起 理由
star_66666 + 5 资源分享达人,加分鼓励!

查看全部评分

回复

举报

lee_st 2018-1-12 10:08:58
加入了CGI脚本命令的文件,后缀名是.cgi。比如下面的HTML文件,我们希望它可以动态的显示信息,就可以为其添加CGI脚本命令:
t <HTML><HEAD><TITLE> Hello World Example </TITLE></HEAD>

t <H2 ALIGN=CENTER> Output a Greeting as Dynamic HTML </H2>

c a <p> %s </p>

t </BODY>

t </HTML>

.
回复

举报

lee_st 2018-1-12 10:09:20
1、前两行以“t”脚本命令开始,表示该行是HTML语句,并将被发送到客户端浏览器。
2、第三行以“c”脚本命令开始,表示它是一个命令行。该行的其余部分将被传递到CGI接口函数cgi_func()的环境变量中。该环境变量称为env,将包含字符串“a <p>%s </ p>”。其中字符串开头的字母a是一个控制字符(控制字符不限制,可以是字母或者数字表示),而cgi_func()函数中必须包含解析这些字符的代码,然后格式化此行HTML代码的其余部分(所谓的格式化是指以HTML标准格式呈现)。
U16 cgi_func (U8 *env, U8 *buf, U16 buflen, U32 *pcgi) {

switch (env [0]) {

case 'a':

len = sprintf ((S8 *) buf, (const S8 *) &env [2], "Hello World");

break;

}



return ((U16) len);

}
回复

举报

lee_st 2018-1-12 10:09:36
当用户使用浏览器加载网页时,switch语句的 case ‘a’子句将被执行。sprintf()语句就变成了
len = sprintf ((S8 *) buf, <p>%s</p> , "Hello World");
回复

举报

lee_st 2018-1-12 10:09:50
而buf就变成了:
<p> Hello World </p>
回复

举报

lee_st 2018-1-12 10:10:16
然后将其输出到浏览器。浏览器会显示HTML代码,如下所示:
<HTML><HEAD><TITLE>Hello World</TITLE></HEAD>

<BODY>

<H2 ALIGN=CENTER>Output a Greeting as Dynamic HTML</H2>

<p> Hello World </p>

</BODY>
回复

举报

angei017 2018-1-12 10:11:06
谢谢分享
回复

举报

lee_st 2018-1-12 10:50:25
浏览器的实际显示效果:
                              
用户可以应用CGI脚本到HTML文本的任何部分,以便实现HTML的动态显示。在上面举的例子中,只使用了一个用户定义控制字符,实际应用中可以使用多个控制字符来构建复杂的动态页面。

回复

举报

lee_st 2018-1-12 10:50:49
46.3  Web网页的数据输入方法
      接下来,我们来看看如何将数据从Web浏览器发送到服务器端的C应用程序中。CGI支持两种数据输入方法,GET和POST。两者都支持HTTP表单来输入数据,关于HTTP表单, 。
回复

举报

lee_st 2018-1-12 10:51:10
1、GET方法
      如果表单提交是被动的(比如搜索引擎查询,输入查询不会更改网络上保存的任何数据),并且没有敏感信息,则应该使用GET方法。因为当用户使用 GET 时,表单数据在页面地址栏中是可见的:
<font size="3">action_page.php?firstname=Mickey&lastname=Mouse</font>
并且浏览器会设定容量限制,所以GET 适合少量数据的提交。
回复

举报

lee_st 2018-1-12 10:51:27
2、POST方法
      如果要使用输入数据进行更改,或者包含敏感信息(例如密码),则应使用POST方法,因为POST 安全性更好,且被提交的数据在页面地址栏中是不可见的。例如,将数据输入数据库来更改该数据库的状态,应使用POST方法。又比如将数据输入到一个小型的嵌入式Web服务器中,也应该使用POST方法。
      总的来说,GET方法适用于改变Web服务器中的环境变量,而POST方法用于用户和C应用程序代码之间传输数据。
回复

举报

lee_st 2018-1-12 10:51:42
46.4 CGI的POST数据输入方法
      下面通过一个实例讲解POST方式的数据输入,比如实现一个允许用户通过Web浏览器输入数据的功能,我们需要添加一个单元格和提交按钮到网页。基本代码如下:
<html>

  <head>

    <title>Post example</title>

  </head>

  <body>

    <form action="index.cgi" method="post" name="CGI">

      <table>

        <tr>

          <td>

            <input type="text" id="textbox1" size="16" value="" />

          </td>

          <td align="right">

            <input type="submit" id="change" value="change" />

          </td>

        </tr>

      </table>

    </form>

  </body>

</html>
回复

举报

lee_st 2018-1-12 10:52:01
反映到浏览器上的显示效果如下:

回复

举报

lee_st 2018-1-12 10:52:19
用户查看此页面时,会看到单元格“textbox1”和提交按钮“change”。用户向单元格中填入数据后,按下按钮会触发POST数据输入方式,“textbox1”中的数据将传送到CGI接口函数。RL-TCPnet会调用HTTP_CGI.c文件中函数CGI_process_data()来处理。
void cgi_process_data (U8 *dat, U16 len) {

unsigned char text1 [16];

var = (U8 *) alloc_mem (40);

do {

dat = http_get_var (dat, var, 40);

if (var [0] != 0 ) {

if (str_scomp (var, "textbox1") == __TRUE) {

str_copy (text1, var+4); // extract user data

process_Input (text1); // user function to process data

}

}

}

}
回复

举报

lee_st 2018-1-12 10:52:34
两个函数CGI_process_data()和CGI_process_var()分别用于POST和GET方式的数据处理。用户必须编写CGI_process_data()函数以便从textbox1单元格中获取数据。在函数CGI_process_data中申请一个名为var的缓冲区,然后通过调用函数http_get_var()复制字符串数据到缓冲区。这个字符串包含单元格的名称和已输入的任何数据。字符串格式如下:
textbox1=<input text>
回复

举报

lee_st 2018-1-12 10:52:50
现在,用户需要做的就是添加代码来解析这个字符串并传递输入数据到C应用程序。基本的POST方法允许用户从任何HTML表单输入数据。但是用户点击了提交按钮后,表单将重新加载,会显示默认选项。比如设计的网页中使用了单选按钮和复选框之类的元素,重新加载后需要显示当前配置,而不能继续显示默认配置。为此,用户需要同时使用CGI动态HTML和CGI POST方法。当页面加载或刷新时,CGI_func()必须输出当前设置。如果输入新值,将继续由函数CGI_process_data()处理。
回复

举报

lee_st 2018-1-12 10:53:33
对于一个简单的文本框,HTML需做如下修改:
回复

举报

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

12下一页
发经验
关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表