zoukankan      html  css  js  c++  java
  • Linux下小型WEB服务器boa的使用1(转)

    这里不讨论代码的逻辑、风格等问题。
    这个程序功能十分简单,就是打印获取到的请求字符串以及用户名称和密码。该程序与普通的C语言程序并无区别,只是多了我们不常用的getenv函数,它在stdlib.h头文件中声明,作用是获取指定的环境变量的值,比如我的系统中HOME这个环境变量值为/home/latelee/,则该函数返回指向这个值的指针。这里出现了QUERY_STRING,这是boa特有的环境变量,从字面上理解为“请求字符串”,我们打印了这个变量的值,也从该字符串中分析得到用户名和密码,下面将会看到。

    在boa源代码目录下的examples目录中有一个cgi程序:cgi-test.cgi,它使用perl语言编写。将它复制到/var/www/cgi-bin目录中,在浏览器输入其地址:
    http://192.168.184.100/cgi-bin/cgi-test.cgi
    则显示下面的cgi测试程序:

    Boa CGI test
    Date: Thu Jan 27 13:45:19 CST 2011
    Method: GET
    Basic GET Form:

    Basic POST Form:
    Sample ISINDEX form:
    /cgi-bin/cgi-test.cgi?param1+param2+param3 Query String:
    Arguments:
    Environment:
    ? SCRIPT_NAME = /cgi-bin/cgi-test.cgi
    ? SERVER_NAME = FightNow
    ? HTTP_ACCEPT_ENCODING = gzip, deflate
    ? SERVER_ADMIN =
    ? REQUEST_METHOD = GET
    ? SERVER_SOFTWARE = Boa/0.94.13
    ? REMOTE_PORT = 3892
    ? HTTP_USER_AGENT = Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR

    2.0.50727)
    ? SERVER_PORT = 80
    ? HTTP_ACCEPT_LANGUAGE = zh-cn
    ? REMOTE_ADDR = 192.168.184.1
    ? SERVER_PROTOCOL = HTTP/1.1
    ? PATH = /bin:/usr/bin:/usr/local/bin
    ? GATEWAY_INTERFACE = CGI/1.1
    ? REQUEST_URI = /cgi-bin/cgi-test.cgi
    ? SERVER_ADDR = 192.168.184.100
    ? HTTP_HOST = 192.168.184.100
    No input stream: (not POST)
    id: uid=99(nobody) gid=0(root) groups=99(nobody)
    Boa http server

    这里我们看到许多的环境变量以及它们的值,它们可以直接使用getenv函数获取。QUERY_STRING是客户端提交的数据,这些数据在传输过程中是经过了编码的,因此,要正确显示它们,必须进行解码。

    • 表单中每个字段用字段名后跟等号,再接上这个字段的值来表示,每个字段之间的内容用“&”连结,前面的程序就是依据“&”进行判断用户名和密码的。
    • 空格符号用加号(“+”)代替,而其它的特殊字符,如“!”、“#”等,使用百分号(“%”)加对应的ASCII码来表示。汉字也是这样表示。

    下面是页面显示的效果图:
    html显示

    当输入用户名和密码分别输入latelee和latelee.org提交后,将出现如下提示信息:

    The following is query result:
    string is: Username=latelee&Password=latelee.org
    your username is latelee
    your password is latelee.org

    可见,程序正确解析出了用户名和密码,不过当字段值有空格时,则显示:

    The following is query result:
    string is: Username=Late+Lee&Password=Late+Lee
    your username is Late+Lee
    your password is Late+Lee

    可以看到,还没正确解析出空格(我不知道在字段值中出现空格本身就是是非法的还是程序的问题)。

    当cgi程序采用get方法时,地址栏的变化为:

    http://192.168.184.100/cgi-bin/hello.cgi?Username=latelee&Password=latelee.org

    而采用post方法时,地址栏为:

    http://192.168.184.100/cgi-bin/hello.cgi

    未尽事宜:中文解析还没有完成,当用户名为“李迟”时,显示如下:

    The following is query result:
    string is: Username=%C0%EE%B3%D9&Password=123
    your username is %C0%EE%B3%D9
    your password is 123

  • 相关阅读:
    不懂不可耻,可耻的是每当遇到不懂的东西不是想办法去学去了解而是极力掩饰。
    在咱学校的论坛上看到的一句话,觉得……我们都在等待某个人,等到累了,就随便牵起某人的手,默默地走进礼...
    在Linux下用Virtualbox虚拟机安装Windows XP
    大学里的挂科是对考前三天不用功的惩罚.这是教算法的赵PZ讲的,窃以为很有道理。可是接下来的十一天里我...
    壮哥!才发现你博客里这么多好东西,慢慢欣赏了,哈哈~~~~~~~~~~
    哥们现在用的什么?ghs不是又被封了吗
    提取字符串中的数字并分别保存
    十一天八考之路
    WPF使ListBox支持手势多选功能
    动手实现扩展属性为对象动态添加获取数据(续)
  • 原文地址:https://www.cnblogs.com/xmphoenix/p/1991270.html
Copyright © 2011-2022 走看看