免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9037 | 回复: 19
打印 上一主题 下一主题

[原创]自动登录CU [复制链接]

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015亚冠之广州恒大
日期:2015-07-22 17:20:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-20 19:59 |只看该作者 |倒序浏览
看到有人要cu自动登录的代码 我这里有一个
本来是说要给瑞儿做一个cu站内短信群发的

但是发短信部分的数据包 一直没时间抓 自己也懒 哎。。。

登录部分 肯定是没问题的 已经验证过 因为我自己就用它登录后来下载cu的站内短信的

短信处理部分的我就不发了

这个是主体部分


import re
import time
import urlparse
from GRequest import GetUrl


class HiCu(object):
    def __init__(self, user, passwd):
        self.user = user
        self.passwd = passwd
        self.Engine = GetUrl()
        
    def Login(self):
        LoginFlg = False
        PostUrl = 'http://hi.chinaunix.net/batch.login.php?action=login'
        PostFrame = {}   #用字典来保存要提交的表单
        PostFrame['username'] = 'ghostwwl'  #这里是你的用户名
        PostFrame['password'] = '***'    #这里是你的密码
        PostFrame['loginsubmit'] = '登陆'  #这个是固定的 抓包可以看出来
        
        try:
            PostDat = self.Engine.InitTable(PostFrame)
            Flag, Result = self.Engine.RequestUrl(PostUrl, PostDat)
            if Flag:
                Result = unicode(Result, 'GBK', 'ignore')
                Rlist = re.findall(u'已经成功登录站点', Result)   #这个是登录成功后返回页面的特征字符串
                if Rlist:
                    LoginFlg = True
        except Exception, e:
            raise Exception("[%s] Login Error: %s" % \
                (time.strftime("%Y-%m-%d %H:%M:%S"), str(e)))
        return LoginFlg



下面是用到的一个类
#!/usr/bin/env python
#-*- coding:utf-8 -*-

#***********************************
# Author: ghostwwl
# DateTime: 2008.2
# Email: ghostwwl@gmail.com
# Note: 自动cookie支持

# Lience:MIT
#***********************************

import urllib2
import urllib
import cookielib
import types
import socket

class GetUrl(object):
    '''
    web url 访问类 支持自动cookie 他的cookie独立于浏览器cookie

    当类实例销毁的时候 就没了 如果需要保存 自己包cookies这个对象保存下
    '
''
    def __init__(self, proxy = None, TimeOut = 120):
        '''
        TimeOut 是请求url的超时时间 注意这里用的socket的全局设置
        '
''
        socket.setdefaulttimeout(TimeOut)
        self.cookies = urllib2.HTTPCookieProcessor(cookielib.CookieJar())
        self.proxy = proxy
        
    def RequestUrl(self, url, dat = None, **headers):
        '''
        请求一个URL 并返回执行情况和结果 所有请求都是post请求
        dat 是经Init_Table编码后的表单数据
        proxy 是一个http代理字符串 格式为 "ip:port"
        headers 是一个需要添加的头字典
        '
''
        try:
            result = False
            SockFile = None
            request = urllib2.Request(url, dat)
            request.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)')
            request.add_header('Pragma', 'no-cache')
            request.add_header('Cache-Control', 'no-cache')
            if headers:
                #headers 是额外的 请求头
                for k, v in headers.items:
                    if type(k) == types.StringType and type(v) == types.StringType:
                        request.add_header(k, v)
            if self.proxy:
                request.set_proxy(self.proxy, 'http')
            opener = urllib2.build_opener(self.cookies)
            SockFile = opener.open(request)
            ret = SockFile.read()
            if ret:
                result = True
        except Exception, e:
            ret = 'Open %s Error: %s' % (str(url), str(e))
        if SockFile:
            SockFile.close()
        return (result, ret)
   
    def InitTable(self, inDat, TheEncode = 'GB2312'):
        '''
        需要Post请求的表单封装
        inDat 是一个Dict类型
        TheEncode 是把表单数据编码的目标编码类型
        '
''
        L = []
        for k, v in inDat.items():
            v = str(v)
            v = unicode(v, 'utf-8')
            v = v.encode(TheEncode, 'ignore')
            s = str(k) + '=' + urllib.quote(v,'')
            s = s.replace('+','%20')
            L.append(s)
        return '&'.join(L)
   

评分

参与人数 1可用积分 +5 收起 理由
aero + 5 原创内容

查看全部评分

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2008-06-20 21:07 |只看该作者
哇~,谢谢。我现在能登录了。能通过验证。但是模拟发帖子的时候就会出错。

http://bbs2.chinaunix.net/thread-1165849-1-1.html

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015亚冠之广州恒大
日期:2015-07-22 17:20:15
3 [报告]
发表于 2008-06-20 22:30 |只看该作者
抓完整的包 模拟浏览器发包的整个过程

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2008-06-20 23:18 |只看该作者
原帖由 ghostwwl 于 2008-6-20 22:30 发表
抓完整的包 模拟浏览器发包的整个过程


抓了。可是对python如何组包实在把握不够。再多学习吧。

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015亚冠之广州恒大
日期:2015-07-22 17:20:15
5 [报告]
发表于 2008-06-21 11:13 |只看该作者
我说的不是用python抓包  你现自己手动 在浏览器发贴  然后 用工具 抓 浏览器的http数据包

python只是用来 模拟浏览器发送  浏览器发了哪些包 然后实现自动发帖

论坛徽章:
0
6 [报告]
发表于 2008-06-21 15:24 |只看该作者
不错。。。。。。。。。。。。

论坛徽章:
0
7 [报告]
发表于 2008-06-21 19:20 |只看该作者
Python切实很强大且简洁咯。

论坛徽章:
0
8 [报告]
发表于 2008-06-22 09:07 |只看该作者
问下自动cookie是什么意思? 保存到内存? 还是指提交时包含(有些网站需要检查cookie)

如果加上refer岂不是更好?

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015亚冠之广州恒大
日期:2015-07-22 17:20:15
9 [报告]
发表于 2008-06-22 10:13 |只看该作者
**headers 里可以加 refer的


cookie保存在内存里的 每次提交的时候 会自动包含

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015亚冠之广州恒大
日期:2015-07-22 17:20:15
10 [报告]
发表于 2008-06-22 11:21 |只看该作者
才看到 原来楼主 也是在北京 也是摄影 爱好
我是摄影新手啊 什么时候 交交偶
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP