- 论坛徽章:
- 4
|
看到有人要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)
|
|
评分
-
查看全部评分
|