使用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; |
|
使用Indy9+D7实现CSDN论坛的登录,回复,发贴,发短信功能
最新推荐文章于 2024-08-07 21:17:44 发布