1000分求一段小程序可能就几十行(300分)

  • 主题发起人 主题发起人 山泉
  • 开始时间 开始时间

山泉

Unregistered / Unconfirmed
GUEST, unregistred user!
题目:如何通过delphi编程在动网论坛发贴
动网论坛地址:http://bbs.dvbbs.net/
先出300分
 
直接用HTTP协议
 
理论上我也会,放一个idhttp控件等等,但是动手就难了
 
这是在动网[灌水乐园]发贴的程序,其他类似,给分[:D]
procedure TForm1.Button1Click(Sender: TObject);
const
BaseURL = 'http://bbs.dvbbs.net/'; //论坛所在地址
UserName = 'guestabc'; //登录用户名
Password = 'guestabc'; //登录密码

CookieNone = 0; //不保留Cookie
CookieDay = 1; //保留Cookie一天
CookieMonth = 2; //保留Cookie一月
CookieYear = 3; //保留Cookie一年

UserNormal = 2; //正常登录
UserHidden = 1; //隐身登录

BoardID = 2; //DVBBS中的灌水乐园,其他只用知道版块号即可,也可根据得到的页面自动提取版块号
var
Params: TStrings;
HTML: String;
MD5Pass: String;
p1,p2: Integer;
begin
Params:=TStringList.Create;
try
Params.Add('username='+UserName);
Params.Add('password='+Password);
Params.Add('CookieDate='+InttoStr(CookieNone));
Params.Add('userhidden='+InttoStr(UserNormal));
Params.Add('comeurl='+BASEURL+'index.asp');
HTML:=IdHttp.Post(BaseURL+'login.asp?action=chk',Params);
if Pos(BASEURL+'index.asp',HTML)=0 then
begin
ShowMessage('登录失败');
Exit;
end;

HTML:=IdHttp.Get(BASEURL+'announce.asp?boardid='+InttoStr(BoardID));
p1:=Pos('Dvbbs.MemberWord=''',HTML);
if p1=0 then
begin
ShowMessage('获取HTML失败!');
Exit;
end;
Inc(p1,18);
p2:=PosEx('''',HTML,p1);

MD5Pass:=Copy(HTML,p1,p2-p1);

Params.Clear;
Params.Add('followup=');
Params.Add('rootID=');
Params.Add('star=');
Params.Add('TotalUseTabl=');
Params.Add('upfilerename=');
Params.Add('username='+UserName);
Params.Add('passwd='+MD5Pass);
Params.Add('font='+'[灌水]');
Params.Add('subject='+'测试,请版主删除!'); //发帖标题,不得超过 25 个汉字或50个英文字符
Params.Add('Expression='+'face1.gif'); //发帖心情,请自行查阅心情图片名称
Params.Add('Content='+'测试,请版主删除!'+#13#10+'测试内容'); //发帖内容
Params.Add('emailflag='+'yes'); //有回复时使用邮件通知您?
Params.Add('signflag='+'yes'); //是否显示您的签名?

IdHttp.Request.Referer:=BASEURL+'announce.asp?boardid='+InttoStr(BoardID);
HTML:=IdHttp.Post(BaseURL+'Saveannounce.asp?boardID='+InttoStr(BoardID),Params);
if Pos('错误信息',HTML)>0 then
ShowMessage('发帖不成功!')
else
ShowMessage('发帖成功!');
finally
Params.Free;
end;
end;
 
佩服,这里只有300分
老大请同时到下面这些地址来领分数凑足1000,同时我好结调一些太久的贴子
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1697774
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1979824
http://www.delphibbs.com/delphibbs/dispq.asp?lid=433395
 
pihome你好我也想问一下,如何分析post上传的参数呢?谢谢回答
 
分析网页中提交数据的Form,看其中有哪些是要提交的
当前版本的DVBBS是调用js通过js生成表单,找到js分析其中的数据,重点是input部分
Params.Add('comeurl='+BASEURL+'index.asp'); //从哪个地址转到登录页面的
HTML:=IdHttp.Post(BaseURL+'login.asp?action=chk',Params); //提交登录
if Pos(BASEURL+'index.asp',HTML)=0 then //如果登录成功,返回的HTML中会有上面地址的链接
begin //借此判断是否登录成功
ShowMessage('登录失败');
Exit;
end;

HTML:=IdHttp.Get(BASEURL+'announce.asp?boardid='+InttoStr(BoardID));
p1:=Pos('Dvbbs.MemberWord=''',HTML); //因为提交新贴时需用到MD5加密后的密码
... //这里通过取得的HTML分析提取
MD5Pass:=Copy(HTML,p1,p2-p1);

IdHttp.Request.Referer:=BASEURL+'announce.asp?boardid='+InttoStr(BoardID);
//新版DVBBS会检查服务器变量REFERER以判断是否是从外部提交的非法数据,这里设置一下让DVBBS认为是合法的,较老的版本没有这个检查
//最后提交发贴数据

其他一些比如动网的发表投票,回贴,退出登录或其他网站等通过类似的方式都可以做到,关键是得到需要提交的数据(参数),这些都可以很容易的通过分析原始网页得到,最后根据FORM的提交方式,将数据Post或Get就行了。。。
 
谢谢你的分析,我试试看,
同时帮忙1876671,,,
同样谢谢山泉呵呵
 
越说越明,这1000分很值得
再请教这个程序问题
以上程序是能够在动网论坛上通过。
但是 http://bbs.kyaz.net/,http://bbs.tcsrz.com/soft/index.asp
同样也是安装动网的论坛

程序改几个常量
BaseURL = 'http://bbs.kyaz.net/';
BoardID = 18
程序无法发帖了,同时论坛登陆失败,如何解决,谢谢!

注:http://bbs.kyaz.net/ 也注册了guestabc用户,密码:guestabc
 
版本不一致,作如下修改
第一步登录,按原来的步骤提示需要Cookies才能登录,我们可以先Get任一网页以获得Cookies,如下:
IdHttp.Get(BaseURL+'login.asp');
Params.Add('username='+UserName); //在Pos登录数据前加上上面的语句获得Cookies
DVBBS的新版有很大改动(全换成js结构),获取MD5密码这一部分也有一些问题,当然我们也可以自己用程序生成MD5密码,这样就不需要去获取MD5密码了,修改如下:
p1:=Pos('type=password value=',HTML); //这里,判断密码所在位置
if p1=0 then
begin
ShowMessage('获取HTML失败!');
Exit;
end;
Inc(p1,20); //这里,加上判断字符串长度即为密码首位置
p2:=PosEx(' ',HTML,p1); //这里,密码结束位置

其他版本如果有一些不同找到这些不同点稍作修改就可以了。。。

 
http://bbs.tcsrz.com/soft/index.asp 同 http://bbs.kyaz.net/,修改后即可发贴
BaseURL = 'http://bbs.tcsrz.com/soft/';
 
pihome先给出500分了,略表谢意,我再测试下,程序理解了,再送上剩下500分
 
to pihome 关于最后几点“版本不一致,作如下修改。。。”
程序没有调试成功
能否发一份完整的对 http://bbs.tcsrz.com/soft/ 论坛 发贴程序到我信箱谢谢
myemail: fa-fj-cn@163.com
 
做了一个简单的Demo,给你发过去了,你先看看。。。
 
第一步登录,按原来的步骤提示需要Cookies才能登录,我们可以先Get任一网页以获得Cookies,如下:
IdHttp.Get(BaseURL+'login.asp');
这时候IdHttp是否自动保存了Cookies?
 
是的,只要IdHttp.AllowCookies=True(默认)就允许使用Cookies,最开始我们是直接Post的,这个时候没有任何Cookies,DVBBS的某些版本可能没有检测到Cookies则不允许登录,我们Get任一个URL后,则会生成相应的Cookies,再Post就没有问题了
 
请问:动网论坛是Delphi做得么?没做过,
 
接受答案了.
 

Similar threads

D
回复
0
查看
905
DelphiTeacher的专栏
D
D
回复
0
查看
861
DelphiTeacher的专栏
D
D
回复
0
查看
834
DelphiTeacher的专栏
D
D
回复
0
查看
700
DelphiTeacher的专栏
D
D
回复
0
查看
662
DelphiTeacher的专栏
D
后退
顶部