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

文章试读
不拘一个遍程序系列:编程序不能一个脑袋钻到底,有时要学会变通,即所谓的曲线救国。一、二、三、四
职场规划:一些杂七杂八的职场感悟吧。不值钱的软件人才 精力充沛与事业成功   让系分来得更猛烈些吧    不值钱的系统分析师   经济危机下大学生如何就业
我的诗歌:都是我的打油诗,但是很值得一读。不要工作还衣食无忧之四难歌   香格里拉美人图
宝宝图片:超可爱的小宝宝 写博客
考试培训:主要是关于考研、软考和等级的相关题解。2009考研试题分析   2008年12月程序员试题分析    2009年软考备考全攻略    2008年5月程序员试题解析
 
《精通Unix下C语言编程与项目实践》之十
设计网页投票器 (二)
作者:朱云翔,胡平
 
15.4.3 网页投票器
本处设计一个网页投票器,它访问“ www.zhiliaowang.com ”上的服务程序“ /toupiaoceshi.asp ”,并通过“ name ”参数向选手投票。如代码 15-16 所示:
代码 15-16 网页投票器(节自 /code/chapter15/http1.c
#include <comlib.h>
char buf2[]=            /* 组装 HTTP 协议 GET 请求报文 */
"GET /toupiaoceshi.asp?name= 朱云翔 HTTP/1.0\r\n"
"Accept: */*\r\n"
"Accept-Language: zh-cn\r\n"
"Accept-Encoding: gzip, deflate\r\n"
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)\r\n"
"Host: www.zhiliaowang.com\r\n"
"Connection: Keep-Alive\r\n\r\n";
int main()
{
    char buf[2048];
    int nSock;
    fprintf(stderr, "------------ 投票开始 ---------------\n");
    ASSERT(ConnectSock(&nSock, 80, "122.51.64.66")==0);/* 建立 TCP 连接 */
    WriteFile(nSock, buf2, strlen(buf2));               /* 发送 GET 请求 */
    fprintf(stderr, buf2);
    memset(buf, 0, sizeof(buf));
    recv(nSock, buf, sizeof(buf), 0);                   /* 接收 GET 请求 */
    fprintf(stderr, buf);
    close(nSock);                                       /* 释放 TCP 连接 */
    fprintf(stderr, "------------ 投票结束 ---------------\n");
}
其中 \r\n 是回车换行 IP 地址 122.51.64.66 是网站 www.zhiliaowang.com IP 地址 读者可以通过执行 ping 命令从域名转换到 IP 地址
# ping www.zhiliaowang.com
PING www.zhiliaowang.com (122.51.64.66): 56 data bytes
64 bytes from 122.51.64.66: icmp_seq=0 ttl=127 time=20 ms
本处并没有使用套接字发送函数 send ,而是调用了封装 write 的函数 WriteFile 来发送 GET 请求,这说明底层文件编程库也能作用于套接字描述符,函数 write read 也能实现套接字信息的发送和接收。
编译代码 15-16
# make http1
        cc -o http1 http1.c -O -DUNIX -DDEBUG -DTRACE_FILE='"./trace"' -D__PATH__='"/"' -I/u/zyx/code/comlib/include  -L/u/zyx/code/comlib/lib  -lcom
运行代码 15-16
# ./http1
------------ 投票开始 ---------------
GET /toupiaoceshi.asp?name= 朱云翔 HTTP/1.0       /* 请求行 */
………………………………                                    /* 省略 */
HTTP/1.1 200 OK                                 /* 状态行 */
…………………………………                                   /* 省略 */
------------ 投票结束 ---------------
【实践经验】程序 http2 实现了向一个特定的 WEB 网页投票的功能,当 WEB 服务器、网页和参数发生变化,程序也必须做响应的改动。
1. 更改代码 15-16 ,设计关于以下 URL 的自动投票程序:
http://publish.games.sina.com.cn/poll.php?p_id=560&t_id=1327
答:首先更改 GET 行常数为:
char buf2[]=
"GET /poll.php?p_id=560&t_id=1327 HTTP/1.1\n"
………………………………                                   
其次,更改报文头属性 Host
"Host: publish.games.sina.com.cn\n"
最后更改 TCP 连接语句中的目的方 IP 地址即可:
ASSERT_NORMAL(ConnectSock(&nSock, 80, "202.108.43.242"));
【注意】本节讲述网页投票器的设计,其目的只是为了向读者阐述基于 TCP 连接的 SOCKET 程序设计方法,并不是号召大家在各类投票活动中作弊。选手的票数应该凭自己的真本领获取,而不能借助所谓的网页投票器,况且很多投票活动都限制了同一 IP 的投票时间间隔和投票次数,这些措施都极大限制了网页投票器的使用范围。
 
相关文章:
封面          前言        目录         策划         作者
动态库        变长参数    文件锁       外设         僵死进程
定时器        I/O重定向   消息队列    共享内存
 
实践项目:
开发网页投票器(一)  (二) 开发网页投票器
 
 

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