设计网页投票器(二)《精通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.comIP地址读者可以通过执行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请求,这说明底层文件编程库也能作用于套接字描述符,函数writeread也能实现套接字信息的发送和接收。
编译代码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的投票时间间隔和投票次数,这些措施都极大限制了网页投票器的使用范围。

 本文转自 zhuyunxiang 51CTO博客,原文链接:http://blog.51cto.com/zhuyunxiang/138060,如需转载请自行联系原作者



相关文章
|
1月前
|
存储 算法 C语言
C语言编程—中缀表达式转换为后缀表达式
1.创建栈 2.从左向右顺序获取中缀表达式 a.数字直接输出 b.运算符 情况一:遇到左括号直接入栈,遇到右括号将栈中左括号之后入栈的运算符全部弹栈输出,同时左括号出栈但是不输出。 情况二:遇到乘号和除号直接入栈,直到遇到优先级比它更低的运算符,依次弹栈。 情况三:遇到加号和减号,如果此时栈空,则直接入栈,否则,将栈中优先级高的运算符依次弹栈(注意:加号和减号属于同一个优先级,所以也依次弹栈)直到栈空或则遇到左括号为止,停止弹栈。(因为左括号要匹配右括号时才弹出)。 情况四:获取完后,将栈中剩余的运算符号依次弹栈输出 例:将:2*(9+6/3-5)+4转化为后缀表达式 2 9
|
2月前
|
C语言
c语言编程练习题:7-60 Welcome to You!
c语言编程练习题:7-60 Welcome to You!
18 0
|
3天前
|
C语言
C语言函数及分文件编程
C语言函数及分文件编程
7 0
|
1月前
|
存储 C语言
深入浅出 C 语言:学变量、掌控流程、玩指针,全方位掌握 C 编程技能
C 语言介绍 C 语言的特性 C 语言相对于其他语言的优势 C 程序的编译 C 中的 Hello World 程序
39 2
|
2月前
|
C语言
c语言编程练习题:7-59 打印菱形图案
c语言编程练习题:7-59 打印菱形图案
22 0
|
2月前
|
C语言
c语言编程练习题:7-58 求幂级数展开的部分和
c语言编程练习题:7-58 求幂级数展开的部分和
21 0
|
2月前
|
缓存 网络协议 Unix
Linux(UNIX)五种网络I/O模型与IO多路复用
Linux(UNIX)五种网络I/O模型与IO多路复用
76 0
|
1月前
|
Unix Shell Linux
在Unix/Linux操作系统中,Shell脚本广泛用于自动化任务
在Unix/Linux操作系统中,Shell脚本广泛用于自动化任务
18 2

相关产品

  • 云迁移中心