我的个人博客(
肥龙的博客)发表了新文章了!
欢迎大家过来阅读,以下是文章的连接地址
http://www.comingcode.com/?p=371
继上一篇文章模拟登录百度空间(http://www.comingcode.com/?p=357)后,为了多点推广自己的博客,通过上网搜索资料和分析http数据包,我再次使用python模拟了开源中国的登录操作,能够发表博客同时也能发送动弹。
具体的实现过程也是和登录百度空间的差不多,都是需要去分析http发送的数据包内容。
通过这两篇文章的模拟登录过程,在分析http的时候,由于在以前公司分析802.1x通信步骤的时候使用了wireshark进行抓包,所有一开始就直接用了这个工具抓包分析http包,这个工具是很强大,但是却不适合新手使用,到后来在网上看到大家都是建议使用fiddler来分析才换了工具,中间折腾的不少时间,但是也算是学习到了新的工具,也算是一个进步吧。
ps:最终我在自己的vps上跑了这段代码,发现居然同步前面几个博客文章到oschina就可以,后面就不行了,但是如果使用本机来测试的话,就一直都可以,难道是osc对外国ip有特殊处理?
下面贴出相关类的实现代码:
# -*- coding: utf8 -*- ‘‘‘ @author: dragon ‘‘‘ import urllib2 import urllib import cookielib import hashlib import re class OSC: def __init__(self): self.usercode = "" self.userid = "" self.cj = cookielib.LWPCookieJar(); self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cj)); urllib2.install_opener(self.opener); #登录 def login(self, name, pwd): loginPostData = { ‘email‘ : name, ‘pwd‘ : hashlib.sha1(pwd).hexdigest() #密码SHA1加密 }; #必须设置head否则返回403拒绝 loginRequest = urllib2.Request(‘https://www.oschina.net/action/user/hash_login‘,urllib.urlencode(loginPostData)); loginRequest.add_header(‘Accept‘,‘*/*‘); loginRequest.add_header(‘Accept-Language‘,‘zh-CN,zh;q=0.8‘); loginRequest.add_header(‘User-Agent‘,‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36‘); loginRequest.add_header(‘Content-Type‘,‘application/x-www-form-urlencoded‘); sendPost = urllib2.urlopen(loginRequest); #获取页面中的user_code和 user #user_code应该是账号加密后的结果 reqRequest = urllib2.Request(‘http://www.oschina.net/‘); reqRequest.add_header(‘Accept‘,‘*/*‘); reqRequest.add_header(‘Accept-Language‘,‘zh-CN,zh;q=0.8‘); reqRequest.add_header(‘User-Agent‘,‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36‘); reqRequest.add_header(‘Content-Type‘,‘application/x-www-form-urlencoded‘); content = urllib2.urlopen(reqRequest).read(); #用正则读取usercode和userid matchVal = re.search(u‘name=\‘user_code\‘ value=\‘(?P<user_code>.*?)\‘/>‘,content); self.usercode = matchVal.group(‘user_code‘); matchVal = re.search(u‘name=\‘user\‘ value=\‘(?P<user_id>.*?)\‘/>‘,content); self.userid = matchVal.group(‘user_id‘); #发动弹 def SendPopMsg(self, msg): #终于可以发动弹了 dtPostData = { ‘user_code‘ : self.usercode, ‘user‘ : self.userid, ‘msg‘: msg.encode("utf8") }; dtRequest = urllib2.Request(‘http://www.oschina.net/action/tweet/pub‘,urllib.urlencode(dtPostData)); dtRequest.add_header(‘Accept‘,‘*/*‘); dtRequest.add_header(‘Accept-Language‘,‘zh-CN,zh;q=0.8‘); dtRequest.add_header(‘User-Agent‘,‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36‘); dtRequest.add_header(‘Content-Type‘,‘application/x-www-form-urlencoded‘); sendPost = urllib2.urlopen(dtRequest); #发送博文 def SendBlog(self, title, content, isPrivate): postdata = { ‘user_code‘: self.usercode, ‘draft‘: 176444, ‘title‘: title.encode("utf8"), ‘catalog‘: 407791, ‘abstracts‘: ‘‘, ‘content‘: content.encode("utf8"), ‘content_type‘: 2, ‘classification‘: 430381, ‘type‘: 1, ‘privacy‘: isPrivate, ‘deny_comment‘: 0, ‘auto_content‘: 1, ‘as_top‘: 0 } loginRequest = urllib2.Request(‘https://www.oschina.net/action/blog/save?‘,urllib.urlencode(postdata)); loginRequest.add_header(‘Accept‘,‘*/*‘); loginRequest.add_header(‘Accept-Language‘,‘zh-CN,zh;q=0.8‘); loginRequest.add_header(‘User-Agent‘,‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36‘); loginRequest.add_header(‘Content-Type‘,‘application/x-www-form-urlencoded‘); sendPost = urllib2.urlopen(loginRequest); if __name__ == "__main__": test = OSC() test.login(‘[email protected]‘, ‘pwd‘) test.SendPopMsg("动弹一下")
时间: 2024-11-01 19:37:13