http://my.qq.com这个网站,用IDHTTP实现登录
我是这样写的,可以返回的信息是系统繁忙,请稍候再试,请问是什么原因procedure TForm1.BitBtn1Click(Sender: TObject);
var
  params:tstrings;
begin
  Params:=TStringList.Create;
  params.Add('fp='+'loginerroralert');
  params.Add('u='+edit1.Text);
  params.Add('p='+edit2.Text);
  params.Add('verifycode='+edit3.Text);
  params.Add('u1='+'http://my.qq.com');
  params.Add('aid='+'8000201');
  memo1.Text:=idhttp1.Post('http://ptlogin2.qq.com/login',params);
  memo1.Text:=utf8toansi(memo1.Text);
end;一般的网站这样写都是可以登录的了,QQ怎么就不行呢,请高手帮忙,非常感谢!!

解决方案 »

  1.   

    楼主,不知道你注意到页面里的代码了吗?
    <form autocomplete="off" id="loginform" name="loginform" action="http://ptlogin2.qq.com/login" method="post" 
    onsubmit="return ptui_onLogin(loginform)" onreset="return onFormReset(loginform)" target="_self" style="margin:0px;">
    你不能用Indy的IdHttp登录的原因就在于 onsubmit="return ptui_onLogin(loginform)" 一句代码。我看了一下,ptui_onLogin()函数的代码如下,如果需要用Indy登录,还需要参照这个函数进行一些处理(具体的办法我现在没有时间来研究,你可以好好研究一下。)^_^
    function ptui_onLogin(A)
    {try{if(parent.ptlogin2_onLogin){if(!parent.ptlogin2_onLogin()){return false}}if(parent.ptlogin2_onLoginEx){var D=A.u.value;var B=A.verifycode.value;if(ptui_str(STR_UINTIP)==D){D=""}if(!parent.ptlogin2_onLoginEx(D,B)){return false}}}catch(C){}return ptui_checkValidate(A)}function ptui_onLoginEx(B,C){if(ptui_onLogin(B)){var A=new Date();A.setHours(A.getHours()+24*30);setCookie("ptui_loginuin",B.u.value,A,"/","ui.ptlogin2."+C);return true}return false}
      

  2.   

    感谢你的回答,我又抓包看分析了下,应该是密码加密的原因,加密应该是32位MD5的方式,可是每次都不一样,要转换成DELPHI对我来说有难度了!!
      

  3.   

    楼主如果要在Delphi下实现md5的加密,可以下载别的前辈写好的一个md5函数。请到如下地址下载:http://www.delphifans.com/SoftView/SoftView_156.html
      

  4.   

    顶,盒子上有一个QQ消息的pas单元封装,不过只适合于QQ2006,我去年的时候还可以直接登录,发消息等,不知道今年怎么样了
      

  5.   

    http://www.2ccc.com/article.asp?articleid=4536
    找了一下,在这里
      

  6.   

    嘿 QQ的MD5是变态滴啦 我试过标准的MD5算法 但结果跟它的不一样  后来我找到了他的加密脚本 发现……好难改写成Delphi  恕我小弟不才 不过 前几天我已经成功PJ 用的是一个WebBrowser控件 省去了翻译和大量的调试
      

  7.   

    我有qq的md5加密~  可以用~~   原创 ~~