免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9049 | 回复: 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 原创内容

查看全部评分

论坛徽章:
0
20 [报告]
发表于 2008-06-28 20:38 |只看该作者
我的代码定写得很烂,我很自卑

论坛徽章:
0
19 [报告]
发表于 2008-06-28 20:37 |只看该作者
我也过类似的程序:论坛审核提示 http://bbs.chinaunix.net/viewthr ... ;highlight=yishanju

是用来登陆Discuz论坛的。

论坛徽章:
0
18 [报告]
发表于 2008-06-26 18:58 |只看该作者
ghostwwl   
用的是什么抓包工具
介绍一下。

论坛徽章:
0
17 [报告]
发表于 2008-06-26 13:31 |只看该作者
暂时看不懂

论坛徽章:
0
16 [报告]
发表于 2008-06-24 01:17 |只看该作者
以下代码是我从 lz 的代码中挑选出来的:


  1. #!/usr/bin/env python                                                           
  2. #-*- coding:utf-8 -*-                                                           

  3. import urllib, urllib2, cookielib

  4. url='http://hi.chinaunix.net/batch.login.php?action=login'
  5. values={'username':'华南虎', 'password':'周正龙', 'loginsubmit':'登录'}
  6. data=urllib.urlencode(values)
  7. fd=urllib2.urlopen(url, data)
  8. html=fd.read()
  9. print html
复制代码



如果要登录,只要上述几行就可以了。

这个是从用户空间进去的,但我始终无法从大门进去。就是这里:http://bbs.chinaunix.net/logging.php?action=login

始终给我 302. 这个门的  loginsubmit 不是 '登录',而是
  1. '提 &nbsp 交'
复制代码
.

不清楚哪里没写对。

论坛徽章:
0
15 [报告]
发表于 2008-06-23 13:28 |只看该作者
原帖由 ghostwwl 于 2008-6-22 14:59 发表
肯定是可以带refer的  

    test = GetUrl()
    result, ret = test.RequestUrl("http://www.artxun.com", None, Referer = "www.baidu.com")
    print ret

GET / HTTP/1.1
Accept-Encoding: identi ...



我的意思,,你1楼的代码我执行了下,没有任何错误或者正确信息。

论坛徽章:
0
14 [报告]
发表于 2008-06-23 12:01 |只看该作者
原帖由 ghostwwl 于 2008-6-22 14:59 发表
肯定是可以带refer的  

    test = GetUrl()
    result, ret = test.RequestUrl("http://www.artxun.com", None, Referer = "www.baidu.com")
    print ret

GET / HTTP/1.1
Accept-Encoding: identi ...


看到 楼上在这里也发了贴了
不知 解决了没有

http://bbs.chinaunix.net/thread-1165469-2-1.html
http://bbs.chinaunix.net/thread-1167738-1-1.html

[ 本帖最后由 wangyouqi 于 2008-6-26 02:39 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
13 [报告]
发表于 2008-06-22 20:56 |只看该作者
原帖由 ghostwwl 于 2008-6-22 11:21 发表
才看到 原来楼主 也是在北京 也是摄影 爱好
我是摄影新手啊 什么时候 交交偶


,纯玩的~

论坛徽章:
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
12 [报告]
发表于 2008-06-22 14:59 |只看该作者
肯定是可以带refer的  

    test = GetUrl()
    result, ret = test.RequestUrl("http://www.artxun.com", None, Referer = "www.baidu.com")
    print ret

GET / HTTP/1.1
Accept-Encoding: identity
Host: www.artxun.com
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)
Connection: close
Referer: www.baidu.com
Pragma: no-cache
Cache-Control: no-cache

这个是我抓包抓的http请求包

还有就是原来代码里面for k, v in headers.items(): 写错了 items后面掉了括号

                for k, v in headers.items:
                    if type(k) == types.StringType and type(v) == types.StringType:
                        request.add_header(k, v)

改为 for k, v in headers.items():
            request.add_header(str(k), str(v))

嘿嘿
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP