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

来源:互联网 发布:docker overlay centos 编辑:程序博客网 时间:2024/05/02 17:19
使用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;

原创粉丝点击