在编这个外挂中遇到的问题主要
1、是淘宝的自动登录问题,
2、淘宝的应用上下文协议的问题
3、HTTPONLY使PHPSESSID为只读造成无法通过TWebBrowser获得
4、这个应用的authid的获得
5、这个应用有些API的调用会需要时间戳,而且它的时间是带毫秒的。
6、JSON的操作问题。
7、数据传递的格式问题
以下代码片断为Delphi所写
对于第一个首先访问
'http://login.taobao.com/member/login.jhtml?style=miniall&from=jianghu&tpl_redirect_url=http%3A%2F%2Fjianghu.taobao.com%2Fadmin%2Fplugin.htm%3Fappkey%3D12029234%26tracelog%3Djhleftmenu
在这个页面找'_tb_token_'这个值,然后制作POST数据
post.Add('TPL_username='+user);
post.Add('TPL_password='+pwd);
post.Add('_tb_token_='+token);
post.Add('action=Authenticator');
post.Add('event_submit_do_login=anything');
post.Add('TPL_redirect_url=http://jianghu.taobao.com/admin/plugin.htm?appkey=12029234&tracelog=jhleftmenu');
post.Add('from=jianghu');
post.Add('fc=2');
post.Add('style=miniall');
post.Add('tid=');
post.Add('support=000001');
post.Add('CtrlVersion=1,0,0,7');
post.Add('loginType=3');
post.Add('minititle=');
post.Add('minipara=');
post.Add('pstrong=2');
post.Add('longLogin=1'); //1为选择两周内不需要重复登录 0为不选
post.Add('llnick=');
post.Add('sign=');
post.Add('need_sign=');
post.Add('isIgnore=');
post.Add('popid=');
post.Add('callback=');
post.Add('not_duplite_str=');
post.Add('need_user_id=');
post.Add('from_encoding=');
通过IDHTTP控件发送POST到'http://login.taobao.com/member/login.jhtml'来实现自动登录
对于第二个问题由于解析它的格式太困难甚至于无法完成(因为它需要app_secret,而这个值是由淘宝给应用申请者的私钥,所以很难获得)
但是由于浏览器它能访问,所以我就去找它是如何实现的,最终在访问http://container.api.taobao.com/container?appkey=12029234&tracelog=jhleftmenu时,在它的HEADER中发现了Location:http://island.hapyfish.com/?top_appkey=12029234&top_parameters=************************************&top_session=********************&top_sign=**************************&tracelog=jhleftmenu(由于这里能算出我的ID,所以被以星号给替换了)。
固我们也可以首先访问http://container.api.taobao.com/container?appkey=12029234&tracelog=jhleftmenu得到Location并跳转,来实现它的应用上下文协议的问题
对于第三个问题由于无法通过TWebBrowser来获得那就用Indy公司的TIDHTTP来实现
对于第四个问题可以通过下载它的SWF文件利用Sothink SWF Decompiler来反编译获得它的取值方式
对于第五个问题可以利用DateUtils中的DateTimeToUnix来实现,由于它返回的数据不带毫秒,所以再随机加三位数字就可以了
对于第六个问题在http://www.json.org/的最下面提供了很多编程语言的JSON实现库,我在这里选择的是superobjectv1.2.4
对于第七个问题我使用的是FireFox+HttpFox来监测的