Open ScienJus opened 7 years ago
我通过文章中的方法进行了测试,此方法虽然能解决103的问题,但是会导致通过uin获取qq号时,返回错误的qq号;而且当获取群列表,然后在获取某个群的详细信息时,也会失败。所以其他人可以根据自己的需求来确定是不是使用文章中提到的方法,亦或者有更好的方法也可提出来分享给大家。
@sxyandapp 之前我也通过uid获取qq号,得到的也是错误的QQ号,我再网页QQ 抓取 发现 GET_QQ_BY_ID referer 应该 是"http://d1.web2.qq.com/proxy.html?v=20151105001&callback=1&id=2" 你可以测测
@sxyandapp 想问下解决103 文章中 ApiURL.GET_FANG_MESSAGE103 的url 是什么?
@ELLIEbleu 就是 smartqq中的 ApiURL.GET_FRIEND_STATUS 这个
@ELLIEbleu 你那个地址不可能是通过uid获取qq的,因为传的参数里都没有uid,我抓取数据包时也看到这个请求了,目前还不知道它是做什么功能的
@sxyandapp 我刚刚又测了一次,确定这个能得到好友的真实qq号 GET_QQ_BY_ID( "http://s.web2.qq.com/api/get_friend_uin2?tuin={1}&type=1&vfwebqq={2}&t=0.1", "http://d1.web2.qq.com/proxy.html?v=20151105001&callback=1&id=2" ) 上次少了一个
@sxyandapp 修复103 文章 解决方法 getClient_type() 是在什么时候调用的,并没有看明白是怎么解决的 出现 response.getStatusCode=103时 return false
@ScienJus @sxyandapp 我有点不明白 retcode=103 是由于Smart QQ多点登录,后端校验失败 ,但我在网页版用一QQ登陆了,并没有退出,然后又用这个QQ号扫码机器人,并没有出现103返回码,登陆成功。我测试的也是多点登陆,可却能正常登陆
@ScienJus 想问哈 smartqq 抓包,扫二维码之后 看到一个请求 http://ptlogin4.web2.qq.com/check_sig?pttype= &uin= &service=ptqrlogin&nodirect= &ptsigx= 这个是干什么的。我看项目并没有用到,但上次解决103错误的博客里也提到这个url
@ELLIEbleu 当你遇到103错误时,调用getClient_type() 即可。m/check_sig?pttype这个地址项目里用到了,不过这个地址是扫码成功后返回的,并不是固定的地址
@ELLIEbleu 你的这个GET_QQ_BY_ID 有空我实验下
@sxyandapp 在这个项目里 ApiURL.java 类里我没有找到m/check_sig?pttype ;还是没有想明白在遇到103错误后 调getClient_type() 这个函数的实现并没有对出现103错误的处理
求教这问题现在有解决吗?如果可以解决就不用每2天重新登录一次,后台可以自动重登了。谢谢!
我也想问哈 这问题现在有解决吗?如果可以解决就不用每2天重新登录一次,后台可以自动重登了。谢谢!@ ScienJus
@ScienJus 避免 103 错误其实很简单,登录时当获取完 psessionid 后,请求一下 get_online_buddies 页面就可以了。具体你可以参考下 pandolia/qqbot 中的 qsession.py 文件,关键代码:
class QSession:
def Login(self, conf):
self.prepareSession()
self.waitForAuth(conf)
self.getPtwebqq()
self.getVfwebqq()
self.getUinAndPsessionid()
self.TestLogin()
return self.Fetch(silence=False)
def TestLogin(self):
# 请求一下 get_online_buddies 页面,避免103错误。
# 若请求无错误发生,则表明登录成功
self.smartRequest(
url = ('http://d1.web2.qq.com/channel/get_online_buddies2?'
'vfwebqq=%s&clientid=%d&psessionid=%s&t={rand}') %
(self.vfwebqq, self.clientid, self.psessionid),
Referer = ('http://d1.web2.qq.com/proxy.html?v=20151105001&'
'callback=1&id=2'),
Origin = 'http://d1.web2.qq.com'
)
@ELLIEbleu 每隔2天重新登录一次的问题是没办法解决的,腾讯的限制。
@ScienJus @pandolia 按上面方法修改java并经测试,请求一下 get_online_buddies可以避免103问题,scienjus帮忙修改下方法吧,谢谢
@xiaonieya @pandolia @TJYSunset @ELLIEbleu 简单的改了一下,请尝试一下,如果没问题我就发布了
昨天收到一封邮件,一位用户提供了一种修复 103 错误码的方式,文章为:
http://blog.csdn.net/u012934723/article/details/50968447
想联系下该文章的作者是否愿意提交一个 Pull Request 完成这部分的功能,如果比较忙也没关系,我会替他提交这部分代码并同样注明他为贡献者,总之感谢他提供的解决方案。
希望可以彻底解决这个恼人的问题。