最近接到一个项目,需求之一是扫码登录,因为遇到一些问题,便去查看京东是怎么实现的。
京东扫码登录流程
1.生成二维码,并在header中返回相关参数
2.通过轮询检测二维码是否被扫描
3.扫描完成后返回success及ticket
4.验证ticket并生成cookie关键参数thor
具体如何交互,教程有很多,这里我不再赘述。
我遇到的问题
项目使用C#进行开发,涉及到网络交互,采用HttpClient进行网络通讯,获取二维码以及cookie一切正常,但是在第二步却一直无法通过验证,一直返回{“code”:257,“msg”:“无效的二维码”},百思不解,困扰了我足足3天。
第4天的时候,索性抛开之前的代码,通过浏览器进行请求,将返回的数据全部手动构造,在写入C#项目中,结果还是不行!
又去翻看前辈们的资料,但是大多没有太细节的东西,第5天,我把HttpClient换成了HttpWebRequest,再次通过浏览器请求,手动构造数据写入C#,居然成功了!
问题的解决
经过反复的摸索,之前不能正常请求的原因是,请求到的cookie中有HttpOnly;这个参数,直接写入下一个请求的时候,会造成错误,于是增加了一个函数,对Cookie进行解析,只取wlfstk_smdl和QRCodeKey构造新的Cookie参与check的请求即可,至此问题顺利解决,项目也顺利完成。
写在后面
以上是个人实际经历,但因时间关系对HttpClient和Cookie没有做过多的研究,如有错误之处欢迎批评指正,同时欢迎一起交流京东爬虫和自动下单,谢谢。