我把问题说清楚点:就是我要用idhttp登陆一个网站的会员管理,如何输入的用户名密码正确,就读取这个ASP文件中的指定的SESSION或COOKIE值.(特别声明:不是读取返回的html页面代码,是返回session和cookie值!)

解决方案 »

  1.   

    session只有在webserver端才可以读到
      

  2.   

    http://blog.csdn.net/hnxyy/archive/2004/06/29/29385.aspx
    使用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;