使用Indy9+D7实现CSDN论坛的登录,回复,发贴,发短信功能

使用Indy9+D7实现CSDN论坛的登录,回复,发贴,发短信功能
代码片断:

const
    LoginUrl='http://www.csdn.net/member/logon.asp';
    PostUrl='http://community.csdn.net/Expert/PostNew_SQL.asp';
    ReplyUrl='http://community.csdn.net/Expert/reply.asp';
    MsgUrl='http://community.csdn.net/message_board/postsend.asp';

MyCookList:全局变量,取得当前用户的Cookie
IdHTTP1:   TIdHTTP;

登录:
function   Logon(UserName,   PassWord,   CookieTime:   string):boolean;
var
    LoginInfo:   TStrings;
    Response:   TStringStream;
    i:   Integer;
    Cookie:string;
begin
    Result   :=False;
    Cookie:='';
    MyCookList   :='';
    Response   :=   TStringStream.Create('');
    LoginInfo   :=   TStringList.Create;
    try
        LoginInfo.Clear;
        LoginInfo.Add('login_name='+UserName);
        LoginInfo.Add('password='+PassWord);
        LoginInfo.Add('from=http://community.csdn.net/Expert/Forum.asp');
        LoginInfo.Add('cookietime='+CookieTime);
        LoginInfo.Add('x=0');
        LoginInfo.Add('y=0');                                                                                                
        IdHTTP1.Request.Referer:='http://www.csdn.net/member/logon.asp';
        IdHTTP1.Request.From   :='http://community.csdn.net/Expert/Forum.asp';
        try
            IdHTTP1.Post(LoginUrl,LoginInfo,Response);
        except
            showmessage('登陆失败');
        end;
        showmessage(Response.DataString);
        //从返回的页面中找出cookie
        for   i   :=0   to   IdHTTP1.Response.RawHeaders.Count-1   do
        begin
            if   UpperCase(Copy(IdHTTP1.Response.RawHeaders[i],1,10))   =   'SET-COOKIE'   then
            begin
                Cookie   :=Trim(Copy(IdHTTP1.Response.RawHeaders[i],12,MAXINT));
                Cookie   :=Copy(Cookie,1,Pos(';',Cookie));
                MyCookList   :=MyCookList+Cookie;
            //     showmessage(Cookie);
            end;
        end;
        IdHTTP1.Request.RawHeaders.Add('Cookie:   '+MyCookList);
    finally
        LoginInfo.Free;
        Response.Free;
    end;
    if   length(MyCookList)>200     then
        result:=True;
end;

//回复
function   Reply(TopicID,   Content:   string):   boolean;
var
    ReplyInfo:   TStrings;
    Response:   TStringStream;
begin
    Result   :=False;
    ReplyInfo   :=   TStringList.Create;
    Response   :=TStringStream.Create('');  
    try
        begin
            //取回复页面
            ReplyInfo.Clear;
            ReplyInfo.Add('Topicid='+TopicID);
            ReplyInfo.Add('xmlReply=aaaaa');
            ReplyInfo.Add('csdnname=');  
            ReplyInfo.Add('csdnpassword=');
            ReplyInfo.Add('ReplyContent='+Content);

            IdHTTP1.Request.CustomHeaders.Add('Cookie:   '+copy(MyCookList,1,length(MyCookList)-1));    
            IdHTTP1.Request.Referer   :='http://community.csdn.net/Expert/xsl/Reply_Xml.asp   Topicid='+TopicID;
            IdHTTP1.Request.UserAgent:='Redhat/9.0';
            try
                IdHTTP1.Post(ReplyUrl,ReplyInfo,Response);
            except
                showmessage('回复失败');
                exit;
            end;
          //   showmessage(Response.DataString);
            if   pos('添加完成,正在生成静态页面,请稍候',Response.DataString)>0   then
                Result   :=true;
        end;
    finally
        ReplyInfo.Free;
        Response.Free;
    end;
end;

//发贴
function   PostNew(RoomID,   Point,   TopicName,
    Content:   string):   boolean;
var
    PostInfo:   TStrings;
    Response:   TStringStream;
begin
    Result   :=False;
    PostInfo   :=   TStringList.Create;
    Response   :=TStringStream.Create('');  
    try
        begin
            //取发贴页面
            //typestate=1&Point=20&TopicName=test&Room=1404&Content=111222
            PostInfo.Clear;
            PostInfo.Add('typestate=1');
            PostInfo.Add('Point='+Point);
            PostInfo.Add('TopicName='+TopicName);
            PostInfo.Add('Room='+RoomID);
            PostInfo.Add('Content='+Content);
            IdHTTP1.Request.CustomHeaders.Add('Cookie:   '+copy(MyCookList,1,length(MyCookList)-1));
            IdHTTP1.Request.CacheControl:='no-cache';  
            IdHTTP1.Request.UserAgent:='Windows   Advanced   Server/5.0';
            try
                IdHTTP1.Post(PostUrl,PostInfo,Response);
            except
                showmessage('发帖失败');
                exit;
            end;
          //   showmessage(Response.DataString);
            if   pos('增加成功,请稍候,正在生成静态页面',Response.DataString)>0   then
                Result   :=true;
        end;
    finally
        PostInfo.Free;
        Response.Free;
    end;
end;

//发短信
function   SendMsg(SendTo,   Content:   string):   boolean;
var
    PostInfo:   TStrings;
    Response:   TStringStream;
begin
    Result   :=False;
    PostInfo   :=   TStringList.Create;
    Response   :=TStringStream.Create('');  
    try
        begin
            PostInfo.Clear;
            PostInfo.Add('Sendto='+SendTo);
            PostInfo.Add('Content='+Content);
            IdHTTP1.Request.CustomHeaders.Add('Cookie:   '+copy(MyCookList,1,length(MyCookList)-1));
            try
                IdHTTP1.Post(MsgUrl,PostInfo,Response);
            except
                showmessage('发送失败');
                exit;
            end;
        //     showmessage(Response.DataString);
            if   pos('发送成功',Response.DataString)>0   then
                Result   :=true;
        end;
    finally
        PostInfo.Free;
        Response.Free;
    end;
end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、支持屏幕打印,控制方法多样,可以打印全部rxlib控件全部InfoPower控件,TDBGrid,TStringGrid,TImage,TEdit等,TDBGridEh,f1book,TDecisionGrid等等众多控件。(例子1,例子2,例子3,例子4,例子5)   2、支持最终用户设计、修改报表,只需连接相关的数据源,指出数据的位置(设置报表样式),无论是主从表,子报表,套表,都可迅速生成。开发一个报表只需几分钟的时间。   3、报表样式可以保存为rmf格式,下次可通过读入使用(配合SQL脚本就可以生成报表)。并可以把带数据的报表保存为rmp格式,在任何机器上都可以浏览、打印,而不需要数据库。   4、生成后的报表支持修改,包括字体的设置,边框的设置,修改内容等。   5、报表编辑器内自带ado,bde,ibx,Diamond dao,dbisam等数据访问控件,可以通过这些控件开发独立的报表制作工具。其使用方法和delphi中的控件是一样的。   6、完全、自由自定义页面、边距、字体,标题和页眉页脚,并可以在自认合适的地方插入函数来实现当前日期,页合计,总合计等功能,合计字段可以放在页头,分组头,并支持条件合计,对分组合计,分页合计,总计等只需简单地设置属性即可。   7、完全支持D5--D7,BCB5--BCB6。   8、报表中可以在自认合适的事件(on beforeprint,on afterprint等)中加入程序脚本,以控制、或实现更复杂的打印效果。   9、更新迅速,可根据使用人员与用户的意见,不断的加入新的功能。   10、多种格式转换,可以把做出的报表转换为html,xls,pdf,bmp,jpeg等等格式。   11、自动对超长记录折行,超长的内容也会自动折行,中文换行不会乱码。   12、首家支持缩放打印功能,可以根据打印时选择的纸张自动缩放报表。   13、首家支持即打即停.   14、首家提供类似excel的报表设计器,给你足够灵活方表的报表设计方式。   15、首家提供双报表设计器(第一种,第二种),满足所有的需求。   16、更是提供类似于ObjectPascal的script,实现特殊功能。   17、首家提供web,IntraWeb中的报表解决方案。   18、首家提供报表压缩处理,占用内存更少,生成报表速度更快。   19、首家提供合并单元格功能,更加适应处理复杂的中文报表。   20、自动填空行,每页打印数量等细节处理更完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值