当前位置:首页 > 探索

易语言post获取Token登陆

易语言post获取Token登陆

易语言写登陆,易语言十个人里有八个卡在Token上。登陆别急着骂接口坑爹,易语言Token这东西说白了就是登陆服务器发你的一张临时门票——你拿着它去请求数据,服务器一看门票有效,易语言才肯把东西给你。登陆问题在于,易语言很多网站的登陆Token不是静态的,它会变,易语言甚至每次打开登陆页都刷新一次。登陆

我调试过一个论坛的易语言登陆接口。第一次抓包,登陆拿到Token值,易语言直接post过去,登陆服务器返回“Token失效”。易语言我盯着抓包工具看了半天,才发现那Token藏在页面源码的某个JS变量里,还带了个时间戳。你手动复制粘贴当然行,但程序要跑,就得先GET一次登陆页,把Token从返回的HTML里抠出来,再拼到post数据里。

具体操作分三步。第一步,用易语言的“网页_访问”命令,GET那个登陆页地址。别小看这一步,有些网站会在Cookie里种个临时标记,你得把返回的Cookie一并存下来,后面post时要带着。第二步,用“正则表达式”或者“文本_取中间”从返回的HTML里提取Token。我习惯用“文本_取中间”,因为Token通常长这样:var token = "abc123xyz";,你只要取“token = ”和“”;”之间的内容就行。注意,有的网站Token藏在hidden的input标签里,那就取name="token" value="到">之间。

第三步,构造post数据。易语言的“网页_访问”支持提交字节集,你直接写网页_访问(登陆地址, 1, "username=xxx&password=yyy&token=" + 取出的Token, Cookie)。这里有个坑——很多新手忘了把Cookie带上,结果服务器不认识你是谁,直接拒绝。还有,密码字段有时候不是明文,得先MD5加密一次,具体看网站前端的JS代码怎么处理的。

我遇到过一个奇葩案例,某网站的Token是动态生成的,每次请求都不一样,但它不是藏在HTML里,而是藏在JS文件里,得额外再发一次请求去拿那个JS文件,然后从里面解析出Token。这种就麻烦点,得加一个子程序专门处理。不过思路一样——先抓包,看Token到底从哪来,再决定怎么取。

写代码时有个细节容易忽略——编码。易语言的“网页_访问”默认是UTF-8,但很多老网站用的是GB2312。如果你post的数据里有中文,不转换编码的话,服务器收到的全是乱码,Token就算对了也会报错。我习惯在post前用“编码_Utf8到Ansi”处理一下,或者直接用“编码_URL编码”把参数转成URL格式。

最后说个土办法。如果你实在找不到Token的生成规律,那就模拟浏览器行为——先用“网页_访问”GET登陆页,把返回的Cookie存下来,然后直接post。有些网站只要你Cookie对,Token错了也能过,因为它校验的是会话状态,不是Token本身。当然,这招不是万能,但能省不少事。

调试的时候别嫌麻烦,多打印几行日志。把每次GET返回的HTML片段、取出的Token值、post返回的结果都输出到编辑框里,一眼就能看出哪步出了问题。我见过有人卡了两天,最后发现是Token的引号没处理干净,字符串里多了个空格。

Token这东西,看着玄乎,拆开就一层窗户纸。你只要记住:先GET拿门票,再POST带门票,中途别把Cookie弄丢。剩下的,就是跟服务器斗智斗勇的乐趣了。

分享到: