设计网页投票器(一)《精通Unix下C语言编程与项目实践》之九

文章试读
不拘一个遍程序系列:编程序不能一个脑袋钻到底,有时要学会变通,即所谓的曲线救国。一、二、三、四
职场规划:一些杂七杂八的职场感悟吧。不值钱的软件人才 精力充沛与事业成功   让系分来得更猛烈些吧    不值钱的系统分析师   经济危机下大学生如何就业
我的诗歌:都是我的打油诗,但是很值得一读。不要工作还衣食无忧之四难歌   香格里拉美人图
宝宝图片:超可爱的小宝宝 写博客
考试培训:主要是关于考研、软考和等级的相关题解。2009考研试题分析   2008年12月程序员试题分析    2009年软考备考全攻略    2008年5月程序员试题解析
 
《精通Unix下C语言编程与项目实践》之九
设计网页投票器 (一)
作者:朱云翔,胡平

15.5 项目:网页投票器�D�DHTTP客户端

在互联网时代,很多服务程序采用了超文本传输协议 HTTP 进行报文传输,比如中国联合通信公司短消息网关系统接口协议中就提供了 HTTP 报文的接口协议,甚至有很多信息系统只支持 HTTP 模式的接口报文,比如在某些企信通接入网关等。因此在 Unix 下开发的 C 程序,就很有必要具备 HTTP 报文的组包、发送和接收功能。
读者们应该有过网上投票的经历,很多网站的投票是不限制 IP 的,因此为了获取一个靠前的排名,不少人在不辞辛劳的点击鼠标,当然也有部分所谓的“聪明人”选择使用投票软件或者网页刷新器。初次接触自动投票工具的用户很可能会惊叹于这些工具强大的投票功能,其实这些软件本质上就是一个 HTTP 客户端,它们编辑选手信息成 URL 并向网页服务器发送读取某个网页的请求,服务器接收请求执行该网页,该网页则自动为编辑的选手加票。

15.5.1 URLUniform Resource Locator,统一资源定位符)

URL 就是我们在浏览器的地址栏里输入的网站地址,浏览器通过 HTTP Web 服务器上站点的网页代码提取出来,并翻译成漂亮的网页。 URL 中可以指定 WEB 站点名称、网页名称,也可以向访问的网页提交不同的参数, WEB 端的投票服务程序正是利用了 URL 中的参数达到了区分选手并为选手加票的目的,比如以下 URL 就是一个投票的例子:
http://www.zhiliaowang.com/toupiaoceshi.asp?name=zyx
其中:
(1) http:// ”代表超文本传输协议,通知网页浏览器(如 IE 等)显示 Web 页,通常不用输入。
(2) www.zhiliaowang.com ”是装有网页的服务器的域名,或站点服务器的名称。
(3) /toupiaoceshi.asp 是服务器端的投票服务程序的绝对路径的名称,“ / ”为根目录
(4) ? 代表后面接着参数。
(5) name= zyx ”标识了一个参数 name ,它的值是“ zyx ”。在投票服务程序中,选手的姓名或编号等信息一般通过参数传入,不同的投票服务程序的参数的设置都不一样,读者要根 据具体情况具体分析 ,本处 URL 的含义是为 姓名叫“ zyx ”的选手投票。

15.5.2 HTTP协议报文格式

接下来我们看看 HTTP 协议( Hypertext   Transfer   Protocol �D�D超文本传输协议)浏览器端(客户端)向 WEB 服务器端访问页面的过程和 HTTP 协议报文的格式。
基于 HTTP 协议的客户机访问包括 4 个过程,分别是建立 TCP 套接字连接、发送 HTTP 请求报文、接收 HTTP 应答报文和关闭 TCP 套接字连接:

1. 创建TCP套接字连接

客户端与 WEB 服务器创建 TCP 套接字连接,其中 WEB 端服务器的地址可以通过域名解析确定, WEB 端的套接字侦听端口一般是 80

2. 发送HTTP请求报文

客户端向 WEB 服务端发送请求报文, HTTP 协议的请求报文格式为:
请求消息 = 请求行(实体头信息) CRLF[ 实体内容 ]
请求行 = 方法  URL   HTTP 版本号  CRLF
方法 = GET|HEAD|POST| 扩展方法
URL = 协议名称 宿主名 目录与文件名
其中“ CRLF ”表示回车换行。
“请求行”中的“方法”描述了对指定资源执行的动作,常用的方法“ GET ”、“ HEAD ”和“ POST ”等 3 种,它们的含义如表 15-8 所示:
15-8 HTTP 请求方法
取值
描述
GET
WEB 服务器中获取对象,不同类型的对象将获取不同的信息,比如:
文件类型对象,获取该文件的内容。
程序类型对象,获取该程序执行的结果。
数据库查询类型对象,获取该查询的结果。
HEAD
要求服务器查找对象的元信息。
POST
从客户端向 WEB 服务器发送数据。
“实体头信息”中记载了报文的属性,利用这些信息可以实现客户端与 WEB 服务器之间的请求或应答,它包括报文的数据类型、压缩方法、语言、长度、压缩方法、最后一次修改时间、数据有效期等信息。
实体内容是报文传送的附加信息,一般供 POST 请求填写。

GET请求报文例子

一个 URL 为“ http://www.zhiliaowang.com/toupiaoceshi.asp?name= 朱云翔”的 GET 请求报文例子如下:
GET http://www.zhiliaowang.com/toupiaoceshi.asp?name= 朱云翔 HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
Host: www.zhiliaowang.com
Connection: Keep-Alive
 
其中 /toupiaoceshi.asp?name= 朱云翔 URL 信息 语句 ACCEPT */* 及其后的语句是 实体头信息
注意 在语句 Connection Keep-Alive 下的空行是必须的。

POST请求报文例子

下面是 HTTP 协议中关于 POST 请求报文例子,节自《中国联合通信公司短消息网关系统接口协议 (SGIP) V1.2 版:
POST /sp.cgi HTTP/1.0                   /* 请求行 服务程序为 sp.cgi */
Host: www.spserver.com                  /* 以下为实体头信息 */
Authorization: Basic <Base64 >
Content-Length: <Content-Length>
 
<CommandId>=<4>                         /* 以下为 POST 请求的实体信息 */
<SequenceNumber>=<205502327125025327>   /* 实体部分输送报文 */
<UserNumber>=<8613001125453>
<SPNumber>=<168>
<MessageContent>=<ABCD 1234>
一般情况下,采用 POST 报文传送信息的数据存储在“实体”部分中。

3. 接收HTTP应答报文

WEB 服务器处理客户请求 并向客户机发送应答报文 HTTP 协议的应答报文格式为
应答报文 = 状态行(实体头信息) CRLF [ 实体内容 ]
状态行    = HTTP 版本号 状态码 原因叙述
状态码描述了 WEB 服务器执行客户机请求的状态信息,其取值含义如表 15-8 所示:
15-8 HTTP 应答响应码含义
取值
描述
1××
保留。
2××
成功接收,比如“ 200 ”表示处理成功。
3××
客户需进一步细化请求。
4××
客户错误,比如“ 404 ”表示访问的指定资源不存在。
5××
服务器错误。

GET应答报文例子

一个请求 URL 为“ http://www.zhiliaowang.com/toupiaoceshi.asp?name= 朱云翔”的应答报文例子如下:
HTTP/1.1 200 OK
Connection: keep-alive
Date: Thu, 26 Jul 2007 14:00:02 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Content-Length: 190
Content-Type: text/html
Set-Cookie: ASPSESSIONIDSAATTCSQ=JOPPKDCAMHHBEOICJPGPBJOB; path=/
Cache-control: private
 
<html>
        <head>
                <title> 精通 Unix C 语言编程 </title>
        </head>
        <body>
        <b> 精通 Unix C 语言编程与项目实战 <br></b>
        <b> 投票测试 <br></b>
        感谢你为选手
        朱云翔
        投票 !
        </body>
</html>
语句 HTTP/1.1 200 OK ,“ 200 是响应码 ,“ OK 是原因描述。

POST应答报文例子

下面是 HTTP 协议中关于 POST 应答报文例子,节自《中国联合通信公司短消息网关系统接口协议 (SGIP) V1.2 版:
HTTP/1.0 200 OK                         /* 状态行 应答成功 */
Date: Tue, 13 Mar 2001 02:45:12 GMT /* 以下为实体头信息 */
Server: Apache/1.3.12 (Unix)
Content-Type: text/html
Connection: close
 
<CommandId>=<80000004>                  /* 以下为 POST 应答的实体信息 */
<SequenceNumber>=<205502327125025327>
<UserNumber>=<8613001125453>
<SPNumber>=<168>
<MessageContent>=< EFGH 5678> <Result>=<0>
一般情况下, POST 应答报文的“实体”部分存储实际传输的信息。

4. 关闭TCP套接字连接

客户机与服务器双方关闭套接字连接 结束 TCP/IP 对话。
 
 

相关文章:

封面          前言        目录         策划         作者
动态库        变长参数    文件锁       外设         僵死进程
定时器        I/O重定向   消息队列    共享内存
 
实践项目:
开发网页投票器(一)   (二) 开发网页投票器
 

你可能感兴趣的:(c,网页,投票,Unix编程)