python模拟登录开源中国

我的个人博客(
肥龙的博客)发表了新文章了!

欢迎大家过来阅读,以下是文章的连接地址

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

python模拟登录开源中国的相关文章

Python模拟登录后爬取网站内容(小说)

最近有个好友让我帮忙爬取个小说,这个小说是前三十章直接可读,后面章节需要充值VIP可见.所以就需要利用VIP账户登录后,构造Cookie,再用Python的获取每章节的url,得到内容后再使用 PyQuery 解析内容. 注意:构造Cookie的过程中,需要你在 Chrome/Firefox 登录,然后自己在控制台查看 cookie,然后手动加入. 第一步:手动构造cookie,绕过登录 [我这里不是破解账户,想破解请出门左拐] 1 #version 2.7 2 3 #!/usr/bin/pyt

【Python数据分析】Python模拟登录(一) requests.Session应用

最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块. 注:本文仅为交流学习所用. 登录特点:明文传输,有特殊标志数据 会话对象requests.Session能够跨请求地保持某些参数,比如cookies,即在同一个Session实例发出的所有请求都保持同一个cookies,而requests模块每次会自动处理cookies,这样就很方便地处理登录时的cookies问题.

【Python模拟登录】RSA加密与重放方式登录 -以模拟登录博客园为例

Python模拟登录第一弹见:[Python数据分析]Python模拟登录(一) requests.Session应用上次的登录是最基本的,全部是明文,而且在浏览器中就可以看到POST的数据.接下来我们来个稍微难一点的–模拟登录博客园(http://www.cnblogs.com) 登录特点:用户名密码都进行了RSA加密,且在浏览器中无法看到POST数据 图1如上图,在post数据中不能显式看到POST内容. 模拟登录步骤 既然浏览器调试功能无法探测到POST数据,那么采用Fiddler试试看,

python模拟登录知乎

这是一个模拟登录知乎的爬虫.运行后输入用户名密码以及和程序同一目录下的验证码图片,登陆成功后能够显示你在豆瓣地昵称. #! /usr/bin/env python #! -*-coding: utf-8 -*- import json import urllib import urllib2 import cookielib class Zhihu_login(object): """登陆知乎的一个演示程序""" def __init__(sel

Python模拟登录wap版百度贴吧+自动回贴

模拟登录的原理都差不多,大致都是这样: 打开首页获取相关cookie: 提交登陆表单(即用户名与密码): 确认是否登录成功: 如果想了解更具体的原理与相关知识,推荐到详解抓取网站,模拟登陆,抓取动态网页的原理和实现(Python,C#等).(不过这系列博文实在太绕太绕太绕,数十篇文章互相穿插让人头晕眼花,我前后断断续续历时几个月才搞懂并编码测试成功) 模拟登录的关键点有两个,一是使用抓包工具(如chrome开发者控制台)分析表单提交的真实链接与相关get/post参数,二是编写管理cookie的

Python模拟登录cnblogs

Python利用requests.Session对象模拟浏览器登录cnblogs request.Session对行可以跨请求的保持cookie,非常方便的用于模拟登录. cnblogs登录页面分析: 登录页面https://passport.cnblogs.com/user/signin 使用抓包工具fiddler(wireshark无法抓取)可以抓取到登录时post的数据: 共三个字段,分别是input1.input2和remember(用户名.密码.是否记住登录信息). 其中,input1

python模拟登录的实现

本文主要用python实现了对网站的模拟登录.通过自己构造post数据来用Python实现登录过程. 当你要模拟登录一个网站时,首先要搞清楚网站的登录处理细节(发了什么样的数据,给谁发等...).我是通过HTTPfox来抓取http数据包来分析该网站的登录流程.同时,我们还要分析抓到的post包的数据结构和header,要根据提交的数据结构和heander来构造自己的post数据和header. 分析结束后,我们要构造自己的HTTP数据包,并发送给指定url.我们通过urllib2等几个模块提供

python模拟登录http basic authentication网站

当访问需要认证的网站时会提示输入正确的用户和密码 如果密码错误会返回401的状态码 401 Authorization Required 通过python脚本模拟登录 #!/usr/bin/python #-*-coding:utf-8-*- import urllib2 #登录的用户名和密码 username = "root" password = "redhat" url="http://192.168.209.200/" def Func(

Python模拟登录wap版百度贴吧+自己主动回贴

模拟登录的原理都差点儿相同,大致都是这样: 打开首页获取相关cookie. 提交登陆表单(即username与password). 确认是否登录成功. 假设想了解更具体的原理与相关知识,推荐到具体解释抓取站点,模拟登陆.抓取动态网页的原理和实现(Python,C#等).(只是这系列博文实在太绕太绕太绕,数十篇文章互相穿插让人头晕眼花,我前后断断续续历时几个月才搞懂并编码測试成功) 模拟登录的关键点有两个.一是使用抓包工具(如chrome开发人员控制台)分析表单提交的真实链接与相关get/post