使用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
    评论
indy delphi是一个开源的网络通信库,用于在Delphi环境下实现网络通信功能。它提供了丰富的组件和函数,可以支持多种网络协议,如TCP、UDP、HTTP等,使开发者能够轻松地实现网络通信功能indy delphi具有以下特点: 1. 简单易用:indy delphi提供了简洁明了的接口,使开发者能够快速上手,实现各种网络通信功能。其代码设计注重可读性和易维护性,方便开发者进行二次开发和定制。 2. 多协议支持:indy delphi支持多种网络协议,包括TCP、UDP、HTTP等,可以满足各种场景的需求。开发者可以根据具体情况选择合适的协议进行网络通信。 3. 跨平台兼容:indy delphi支持多个平台,包括Windows、Linux等,使开发者能够在不同平台上开发和部署网络通信应用。这样一来,开发者可以更多样化地选择开发环境,同时也能让应用程序具备更广泛的适用性。 4. 开源自由:indy delphi是一个开源项目,遵循GNU许可证,使开发者能够自由地使用、修改和重新分发代码。这样一来,开发者可以根据自己的需求进行定制和扩展,同时也可以与其他开发者共享和交流经验。 综上所述,indy delphi是一个功能强大、易用灵活的网络通信库,适用于各种网络通信应用的开发。无论是初学者还是有经验的开发者,都可以通过indy delphi快速地构建高效可靠的网络通信应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值