使用clientsocket控件实现csdn论坛帖子的自动回复
写此文章的目的不是要鼓励大家恶意灌水,而是要了解http头信息传输的机制及cookie的一些知识,讲之前大家先看一下下面我在csdn所截获的回复帖子的http包信息内容:
typestate=1&point=0&topicname=%b7%a2%cc%f9%b2%e2%ca%d4%a3%ac%cf%d0%c8%cb%ce%f0%bd%f8%a3%a1&room=1404&content=rt
//point:分数0 topicname:文章标题:发贴测试,闲人勿进!是经过unicode编码的 content:内容: rt 上面是传递的参数
10.104.9.30(1062)-> //发送方ip及端口
10.104.9.30(80) //接受方ip及端口
post /expert/postnew_sql.asp http/1.1 //接受页面及http版本
accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*
referer: http://expert.csdn.net/expert/postnew.asp?room=1404 //提交的地址
accept-language: zh-cn //中文语言
content-type: application/x-www-form-urlencoded
accept-encoding: gzip, deflate //接受压缩格式类型
user-agent: mozilla/4.0 (compatible; msie 6.0; windows nt 5.0) //用户环境
host: expert.csdn.net //主机名称
content-length: 111 //长度:111
connection: keep-alive //保持激活状态
cache-control: no-cache //没有使用缓存
cookie: remenber=0; aspsessionidaaatsbbs=pohkdgibfhampecbcdhihbcd; room=0; username=dashi888; speaknum=0; speaktime=2003%2d5%2d15+11%3a56%3a34; adminok=true; userid=487815; info1=0; m%5ftype=1; aszx=0a727a0323230cd62e4cf5326besba01; mid=476831 //cookie的内容
注:用户的cookie是经过32位加密的,我们要先构造自己要发送的http包信息
截图如下:

下面是代码部分:
unit submit;
interface
uses
windows, messages, sysutils, classes, graphics, controls, forms, dialogs,
scktcomp, nmurl, stdctrls, comctrls, extctrls;
type
tform1 = class(tform)
url: tnmurl;
clientsocket1: tclientsocket;
label1: tlabel;
label2: tlabel;
label3: tlabel;
edit1: tedit;
edit2: tedit;
edit3: tedit;
label4: tlabel;
edit4: tedit;
label5: tlabel;
button1: tbutton;
button2: tbutton;
statusbar1: tstatusbar;
memo2: tmemo;
memo1: tmemo;
label6: tlabel;
label7: tlabel;
label8: tlabel;
edit5: tedit;
edit6: tedit;
label9: tlabel;
edit7: tedit;
button3: tbutton;
timer1: ttimer;
button4: tbutton;
timer2: ttimer;
button5: tbutton;
procedure button1click(sender: tobject);
procedure clientsocket1error(sender: tobject; socket: tcustomwinsocket;
errorevent: terrorevent; var errorcode: integer);
procedure clientsocket1read(sender: tobject; socket: tcustomwinsocket);
procedure button2click(sender: tobject);
procedure edit4keypress(sender: tobject; var key: char);
procedure edit5keypress(sender: tobject; var key: char);
procedure edit6keypress(sender: tobject; var key: char);
procedure edit7keypress(sender: tobject; var key: char);
procedure timer1timer(sender: tobject);
procedure button3click(sender: tobject);
procedure button4click(sender: tobject);
procedure timer2timer(sender: tobject);
procedure clientsocket1connect(sender: tobject;