ftp搜索引擎的设计和实现:5.1 CGI脚本(二)

来源:互联网 发布:tb程序化交易平台源码 编辑:程序博客网 时间:2024/06/08 02:52
 有表单的网页通常需要跟服务器交互,比如你要把输入的用户名、密码、生日等提交,以便服务器处理。cgi脚本怎样获取用户的输入?
      为了传递一个参数给脚本,可以在URL中使用 (?) 插入脚本名词和参数之间。
    
      表单从浏览器发给服务器有两种方法。GET 和 POST。
      GET方法将数据打包放置在环境变量QUERY_STRING中作为URL整体的一部分传递给服务器。
      POST做很多类似GET同样的事情, 不同的地方就是它是分离地传递数据给脚本. 你的脚本通过标准输入获取这些数据. (有些Web服务器是存储在临时文件中.) 这个QUERY_STRING环境变量将不再设置。
      那你用那个方法呢? POST是个安全的方法, 尤其如果你的表单中有很多数据的话. 当你用GET, 这个服务器就分配变量QUERY_STRING给所有的表单数据, 但是这个变量可存储量是有限的. 换句话说,如果你有很多数据但是你又用GET,你会丢失很多数据.
      如果你用POST, 你可以尽可能多地使用数据, 因为这些数据从来也不分配到一个变量里.

      URL编码是一种浏览器用来打包表单输入的格式. 浏览器从表单中获取所有的name和其中的值 ,将他们作为name/value参数编码, 移去那些不能传送的字符, 将数据排行等等,这些还取决于你用GET还是POST?作为URL的一部分或者分离地发给服务器. 不管哪种情况, 在服务器端的表单输入格式样子象这样:
      theName=Ichabod+Crane&gender=male&status=missing&headless=yes

      URL编码遵循下列规则:
      每对name/value由&符分开.
      每对来自表单的name/value由=符分开. 如果用户没有输入值给这个name,那么这个name还是出现,只是无值(象这样 "name=").
      任何特殊的字符(就是那些不是简单的七位ASCII,如汉字) 将以百分符%用十六进制编码. 当然也包括象 =, &, 和 % 这些特殊的字符.
      在输入区中的空格将以加号+显示.

      因为表单输入是用这个URL编码传递给你的脚本的,在你用这些参数之前必须解码。

      看看这个url:
http://iseftp.2288.org:52080/cgi-bin/snapshot?url=0day.happy98.org/

      它指示脚本名称为snapshot,第一个变量是url,值为0day.happy98.org/

      查看src/search/queryentry.cpp里的getQueryCondition()函数,该函数用于search程序解析浏览器的输入。


原创粉丝点击