【转载请注明出处:From 李诗雨—http://blog.csdn.net/cjm2484836553/article/details/77341779】
注册时总是出现“验证码不正确”,本来以为这个问题没什么意义,但是今天在群里看到一个同学也遇到了这个问题,并且折腾好久,于是便立马打开电脑,觉得还是应该把这个问题记录一下。
【问题描述】:
后台给了两个接口:获取短信验证码后----------->进行注册(注册需要用户名,密码和手机验证码)
这本是个再简单不过的工作了,于是二话不说开始撸代码,分分钟搞定。
可是诡异的事情发生了总是“验证码不正确”,看了后台打的Log日志也确实是“验证码”不正确,这还不算什么,关键让
我觉得蹊跷的是,如果直接用浏览器去请求第一个获取验证码的接口,紧接着再却请求注册接口,浏览器返回的数
数据确实“注册成功”!!!我的第一反应是这不可能!但是以防一,本姑凉还是谦虚地检查了一下那少得可怜的几行
代码,并再次对了下接口确定数据没有传错。恩,确实确实没有问题!!!我有点方了,难道是我在做梦,这几行
小代码居然拦住了姐,说出去还怎么在it界混了,于是我很无耻的求助了我爸,他很是不屑,说不能出现这种情况,
但是最终他还是不情愿的帮我试了一下,同样出现了诡异的结果,他开始gg了。
但是,他发现了一点蛛丝马迹:
他问我,“这个sessionId不用当做参数传给注册接口吗?”。
我重新审查了接口文档后,很自信的说“不用!”
“确定?”
“确定以及肯定。”
然后我又发挥我的个人魅力让ios的小伙伴试了下这俩接口。
结果他却“注册成功了”!!!晴天霹雳呐!!!
我把这个消息又告诉了粑粑“ios那边是没问题”。
好吧如此看来,就是我们安卓有问题了。
于是粑粑便开始各种尝试,post请求不行,用get试试,还不行把retrofit请求改为okhttputils,还是不行,
最后他连排列组合都用上了,还是不行。
然后,粑粑就抛弃了我,继续去撸他自己的代码了。。。
姐姐我怎么可能这么容易放弃,但是这个接口还是其他公司写的,没联系上写这个接口的后台,于是姐就随便揪了
一个本公司的后台,令我感到奇怪的是,他同样询问了我“sessionId”,这不得不让我有所思考了。于是
我就问他能不能从“sessionId”下手,然后来顺藤摸瓜,找出元凶。他也是想了有一会,突然他打了个响指,又朝我抛
了个媚眼“你先用一个浏览器去调那个验证码接口,接着用另一个不同的浏览器再去调注册接口,看看什么情况”。结
果是浏览器这次也“验证码错误了”。我的脸更方了。他却自信的说“我知道原因了。”你在调用登录接口时,在头里面
获得的sessionId 传个'JSESSIONID',*********”,于是我加了一行代码:
.addHeader("Cookie", "JSESSIONID=" + jsessionid);
再次运行程序,居然“注册成功了”!
接下来,你们可能想到了,后台的小伙伴,给我讲了半天的为什么。说了很多很多,都是关于后台的Session机制的
这里我就不细说了,想了解的欢迎戳链接:http://www.cnblogs.com/evenma/p/4930949.html进行查看
【解决办法】以OkHtttpUtils为例:
OkHttpUtils.post()
.url(ServerConfig.REMOTE_BASE_URL + ServerConfig.REGISTER_URL)
.addHeader("Cookie", "JSESSIONID=" + ssionId)
.addParams("account", account)
.addParams("phoneCode", phoneCode)
.addParams("password", password)
.build()
.execute(new StringCallback() {
【结局】
注册成功,嘲笑粑粑~
怎么样,程序猿的世界是不是也挺精彩的~