使用Python模拟登录QQ邮箱获取QQ好友列表

上传人:jiups****uk12 文档编号:40016229 上传时间:2018-05-22 格式:DOC 页数:6 大小:60KB
返回 下载 相关 举报
使用Python模拟登录QQ邮箱获取QQ好友列表_第1页
第1页 / 共6页
使用Python模拟登录QQ邮箱获取QQ好友列表_第2页
第2页 / 共6页
使用Python模拟登录QQ邮箱获取QQ好友列表_第3页
第3页 / 共6页
使用Python模拟登录QQ邮箱获取QQ好友列表_第4页
第4页 / 共6页
使用Python模拟登录QQ邮箱获取QQ好友列表_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《使用Python模拟登录QQ邮箱获取QQ好友列表》由会员分享,可在线阅读,更多相关《使用Python模拟登录QQ邮箱获取QQ好友列表(6页珍藏版)》请在金锄头文库上搜索。

1、使用使用 Python 模拟登录模拟登录 QQ 邮箱获取邮箱获取 QQ 好友列表好友列表最近因开发项目的需要,有一个需求,就是很多 SNS 网站都有的通过 Email 地址 导入好友列表,不过这次要导入的不是 Email 列表,而是 QQ 的好友列表。实现方式:通过 google 一搜,实现的方式大概有下面这篇文章提到的几种方法:http:/ QQ 邮箱的方式来实现,该实现方式在海内网上的好友查找功能也可以看到。QQ 邮箱的官方登陆地址是 http:/ QQ 号登录的话,除了密码,还需要输入验证码。看到海内上的 QQ 好友导入功能也是需要输入验证码的,而且验证码的样子和 QQ 邮箱的很像。由于

2、这是需要在用户手动输入密码的情况下才能实现的功能,因此输入验证码的工作也可以让用户手动来完成。验证码处理:通过对 http:/ 页面的分析, QQ 邮箱的验证码方式实现原理其实是很简单,当需要一张验证码图片或看不清而需要换一张时,它都是向地址 http:/ 发出请求,(页面上该地址是通过 js 生成的,为了防止浏览器缓存,地址末尾还会带有随机一个随机数),而该链接不但返回一张图片,还在 http 头部带有设置 cookie 的一段 header。这样当用户提交表单的时候,浏览器就会把该 cookie 发送回服务器,服务器通过比较 该 cookie 值和经过某种运算后的表单中的验证码值 就可以判

3、断验证码是否填写正确。现在的问题是由于 cookie 的安全机制,验证码图片不能直接从腾讯的服务器上去取,那样用户在将 QQ和密码发送到我们的服务器时,验证码的 cookie 不会一起发过来。解决方式其实也很简单,将验证码的获取地址改为我们自己的服务器,我们的服务器作为简单的代理,从腾讯的服务器上去获取真正的验证码,再将图片内容和那段 cookie 发送回用户浏览器。那样用户提交表单的时候,那段 cookie 就又会发送回我们的服务器了。绕过其他验证安全机制:一般上有了账号,密码,验证码这 3 样东西就可以实现模拟登录很多网站了,但是 QQ 邮箱还有其他的安全机制,在 QQ 邮箱登陆的表单中还

4、有一个像这样 的 hidden 域,该 value 每次刷新页面都会改变,同时在表单提交的时候,还会通过 js 将该值与其他 hidden 域的值进行某些计算才正式提交表单。通过多次模拟登录,估计该值是用来判断登录 session 超时的,同时也参与其他的一些干扰加密的计算。而且该值与验证码是完全无关的,因此在显示我们表单时,只要先去抓取一下 http:/ 页面,从里面提取出 ts 值, 连同其他所有 hidden 域 和相关计算的 js 代码放入我们的表单中就可以了。因此,实际上我们的表单只需要稍微修改一下 http:/ 页面的内容就可以作为显示给用户的表单。主要包括以下几个方面,这里我使用

5、的 django,所以使用 django 的模板语法:1、 改为 2、表单的 action 地址改为我们自己这里假设为 /friends/ 因此改为3、图片验证码地址,有两个地方要改:document.write(“);改为document.write(“);另外一个 changeimg 函数内, 也将相应的地址改为我们自己的服务器即可。改了这些,页面看上去和原来几乎一样,只是所有交互都改到了我们的服务器上,出于版权和页面统一的需要,在使用到自己的网站上时,可以使用自己设计的页面,只要表单的初始化和提交与原来一样就可以了,甚至也可以通过阅读 js 部分的源代码,把 ts 部分的计算移到服务器端

6、进行。示例代码:以下是整个 views.py 的代码,包括后面会讲到模拟登录部分,login 和 qq_captcha 分别用来初始化登陆页和获取图片验证码:Python 代码代码 1.# Create your views here. 2.from django.shortcuts import render_to_response 3.from urllib2 import Request, urlopen, build_opener, HTTPCookieProcessor 4.from urllib import urlencode 5.from cookielib import Co

7、okieJar 6.from django.http import HttpResponse 7.import re 8.from xml.sax.saxutils import unescape 9.from BeautifulSoup import BeautifulSoup 10. server_no = m11 11. login_error_re = pile(“errtype=(d)“) 12. login_succ_re = pile(“frame_html?sid=(.+?)“) 13. hacked_friendlist_page_re = pile(r.+?, re.DOT

8、ALL) 14. body_re = pile(r.+?, re.DOTALL) 15. 16. def login(request): 17. url = http:/ 18. re_obj = pile(rname=“ts“svalue=“(d+)“) 19. match_obj = re_obj.search(urlopen(url).read() 20. ts = match_obj.group(1) 21. return render_to_response(login.html, locals() 22. 23. def qq_captcha(request): 24. url =

9、 http:/ % request.GETaid 25. f = urlopen(url) 26. r = HttpResponse(f.read(), mimetype = f.info()Content-Type, ) 27. rPragma = no-cache 28. r.set_cookie(verifysession, f.info()Set-Cookie.split(;)0.split(=)1.strip() 29. return r 30. 31. def qq_friends(request): 32. for k in request.POST: 33. print %s

10、: %s % (k, request.POSTk) 34. verifysession = request.COOKIESverifysession 35. print verifysession 36. headers = Cookie:verifysession=%s % verifysession, 37. Content-Type:application/x-www-form-urlencoded, 38. Referer:http:/ 39. User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN;rv:1.9.0.1) G

11、ecko/2008070208 Firefox/3.0.1, 40. 41. data = urlencode(request.POST) 42. login_request = Request(http:/% % server_no, data, headers) 43. result = urlopen(login_request) 44. content = result.read() 45. login_error = login_error_re.search(content) 46. if login_error: 47. error_no = login_error.group(

12、1) #1:password wrong 2: captcha wrong 48. if error_no = 1: 49. error_msg = password or qq wrong 50. elif error_no = 2: 51. error_msg = captcha wrong 52. return render_to_response(friends.html, locals() 53. sid = login_succ_re.search(content).group(1) 54. 55. friends_list_headers = Referer:http:/ 56.

13、 User-Agent:Mozilla/5.0 (Windows; U; Windows NT5.1; zh-CN; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1, 57. 58. friends_list_request = Request(http:/% , 1) 75. friend_email = friend.p.imgaddr 76. friend_listgroup.a.string.append(friend_name, friend_email) 77. 78. return render_to_response(friends.html, locals() 模板 friends.html 的代码:Html 代码代码 1. 2. 3. 4.好友列表 5. 6. 7. 8.%if error_msg% 9.error_msg 10. %endif% 11. 12. %for group, friends in friend_list.items % 13. 14. group: 1

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号