下面是小编为大家整理的一个常用的Python模拟登陆类,本文共10篇,仅供参考,大家一起来看看吧。
篇1:一个常用的Python模拟登陆类
作者:Cosven 字体:[增加 减小] 类型:
这篇文章主要分享的是一个常用的Python模拟登陆类,而且可以支持cookie保存,十分的实用,这里推荐给大家,有需要的小伙伴可以参考下,
代码非常简单,而且注释也很详细,这里就不多废话了
tools.py
# -*- coding:utf8 -*-‘‘‘# =============================================================================# FileName: tools.py# Desc: 模拟浏览器# Author: cosven# Email: yinshaowen241@gmail# HomePage: www.cosven# Version: 0.0.1# LastChange: -03-27 00:59:24# History:# =============================================================================‘‘‘ import urllibimport urllib2import cookielib class MyWeb: “”“ 模拟一个浏览器 ”“” def __init__(self): self.header = {‘Host‘: ‘music.163‘,‘Content-Type‘: “application/x-www-form-urlencoded; charset=UTF-8”,‘Referer‘: ‘music.163/song?id=26599525‘,“User-Agent”: “Opera/8.0 (Macintosh; PPC Mac OS X; U; en)” } self.cookie = cookielib.LWPCookieJar() self.cookie_support = urllib2.HTTPCookieProcessor(self.cookie) self.opener = urllib2.build_opener(self.cookie_support, urllib2.HTTPHandler) urllib2.install_opener(self.opener) def post(self, posturl, dictdata): “”“ 模拟post请求 :param string posturl: url地址 :param dict dictdata: 发送的数据 ”“” postdata = urllib.urlencode(dictdata) request = urllib2.Request(posturl, postdata, self.header) try:content = urllib2.urlopen(request)return content except Exception, e:print (“post:” + str(e))return None def get(self, url): “”“ 模拟get请求 :param url: url地址 :return content: 常使用read的方法来读取返回数据 :rtype : instance or None ”“” request = urllib2.Request(url, None, self.header) try:content = urllib2.urlopen(request)return content except Exception, e:print (“open:” + str(e))return None if __name__ == “__main__”: import hashlib web = MyWeb() url = ‘music.163/api/login/‘ data = { ‘username‘: ‘username‘, # email ‘password‘: hashlib.md5(‘password‘).hexdigest(), # password ‘rememberLogin‘: ‘true‘ } res = web.post(url, data) print res.read() # url_add = ‘music.163/api/playlist/manipulate/tracks‘ # data_add = { # ‘tracks‘: ‘26599525‘, # music id # ‘pid‘: ‘16199365‘, # playlist id # ‘trackIds‘: ‘[“26599525”]‘, # music id str # ‘op‘: ‘add‘ # opation # } # res_add = web.post(url_add, data_add) # print res_add.read() # 完了可以试着查看自己网易云音乐相应列表歌曲
以上就是本文给大家分享的代码了,希望大家能够喜欢,也希望能够对大家学习Python有所帮助,
篇2:python模拟登陆Tom邮箱示例
最近更 新
python文件和目录操作方法大全(含实例)
python将多个文本文件合并为一个文本的代
pip 错误unused-command-line-argument-h
简单文件操作python 修改文件指定行的方法
videocapture库制作python视频高速传输程
Python 正则表达式操作指南
python插入排序算法的实现代码
python中精确输出JSON浮点数的方法
Python splitlines使用技巧
python 获取et和excel的版本号
热 点 排 行
Python入门教程 超详细1小时学会
python 中文乱码问题深入分析
比较详细Python正则表达式操作指
Python字符串的encode与decode研
Python open读写文件实现脚本
Python enumerate遍历数组示例应
Python 深入理解yield
Python+Django在windows下的开发
python 文件和路径操作函数小结
python 字符串split的用法分享
篇3:python模拟登陆阿里妈妈生成商品推广链接
最近更 新
python连接mysql调用存储过程示例
Python模块学习filecmp 文件比较
python判断、获取一张图片主色调的2个实例
python算法学习之桶排序算法实例(分块排序
Python tempfile模块学习笔记(临时文件)
python实现数通设备tftp备份配置文件示例
python使用xauth方式登录饭否网然后发消息
python中使用sys模板和logging模块获取行
python类定义的讲解
Python 变量类型及命名规则介绍
热 点 排 行
Python入门教程 超详细1小时学会
python 中文乱码问题深入分析
比较详细Python正则表达式操作指
Python字符串的encode与decode研
Python open读写文件实现脚本
Python enumerate遍历数组示例应
Python 深入理解yield
Python+Django在windows下的开发
python 文件和路径操作函数小结
python 字符串split的用法分享
篇4:linux登陆认证模拟Linux
一个很简陋的认证过程,通过用户名(或用户ID)和密码明文验证该用户是否可以登陆系统, just for fun,没有时间完善了,不过应该比较容易扩充和增加其他的功能。 注意链接需要制定-lcrypt。如果需要一般用户同样可以使用,需要将程序setuid(需要验证/etc/s
一个很简陋的认证过程,通过用户名(或用户ID)和密码明文验证该用户是否可以登陆系统。
just for fun,没有时间完善了,不过应该比较容易扩充和增加其他的功能。
注意链接需要制定-lcrypt。如果需要一般用户同样可以使用,需要将程序setuid(需要验证/etc/shadow):
# chown root:root checkpasswd
# chmod 4755 checkpasswd
usage:
$ checkpasswd --user testuser --password testpassword --verbose
$ checkpasswd -i 1001 -p empty_passwd -v
#define _XOPEN_SOURCE
#define _GNU_SOURCE
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
typedef enum{
AUTH_TYPE_AUTO,
AUTH_TYPE_DES,
AUTH_TYPE_MD5,
NR_AUTH_TYPE
}auth_type_t;
typedef enum{
AUTH_INFO_AUTO,
AUTH_INFO_PASSWD,
AUTH_INFO_SHADOW,
NR_AUTH_INFO
}auth_info_t;
typedef struct login_info{
char* login; /* login name */
char* cname; /* cname */
char* group;
char* passwd; /* plain text password */
uid_t uid;
gid_t gid;
uint16_t auth_type;
uint16_t auth_info;
}login_info_t;
static login_info_t login_info = {
NULL, NULL, NULL, NULL, -1, -1, 0, 0,
};
static int verbose_flag;
/**
* option for getopt_long
*/
static const struct option opt_options[] = {
{“user”, 1, 0, 'n'},
{“uid”, 1, 0, 'u'},
{“password”, 1, 0, 'p'},
{“help”, 0, 0, '?'},
{“version”, 0, 0, 'V'},
{“verbose”, 0, 0, 'v'},
{0, 0, 0, 0},
};
static void help(void)
{
const struct option* o;
for(o = &opt_options[0]; o && o->name; o++){
fprintf(stderr, “%sn”, o->name);
}
fprintf(stderr, “n”);
}
static void version(void)
{
fprintf(stderr, “version: 0.0.1n”);
}
int verbose(const char* fmt, ...)
{
va_list ap;
int n;
if(!verbose_flag)
return 0;
va_start(ap, fmt);
n = vfprintf(stderr, fmt, ap);
va_end(ap);
return 0;
}
int auth_des(const char* plain_text, const char* key_compare)
{
char* des_key;
char salt[2] = ;
if(strlen(key_compare) < 2)
return -1;
strncpy(salt, key_compare, 2);
des_key = crypt(plain_text, salt);
if(strcmp(des_key, key_compare) == 0)
return 0;
verbose(“auth DES: non-match(Wrong) password!n”);
return -1;
}
/**
* need GNU libc 2.x or higher
*/
int auth_md5(const char* plain_text, const char* key_compare)
{
char* md5_key;
const char* p;
char salt[12] = ;
int n = 0;
if(strlen(key_compare) < 3)
return -1;
if(strncmp(key_compare, “$”, 3) != 0){ /* not start with “$”, please confirm
to /etc/shadow file */
verbose(“auth MD5: not start with ”$“n”);
return -1;
}
p = key_compare + 3;
while(*p++){
++n;
if(!p){
verbose(“auth MD5: invalid shadowed MD5 password!n”);
return -1; /* invalid shadowed md5 password */
}
if(n > 8){
break;
}
if(*p == '$'){
break;
}
}
strncpy(salt, key_compare, n + 3);
md5_key = crypt(plain_text, salt);
if(strcmp(md5_key, key_compare) == 0)
return 0;
verbose(“auth MD5, non-match(Wrong) password!n”);
return -1;
}
int check_shadowed_passwd(login_info_t* login_info)
{
struct passwd* pw;
struct spwd* spw;
if(login_info->login){
spw = getspnam(login_info->login);
}else if(login_info->uid >= 0){
pw = getpwuid(login_info->uid);
if(!pw){
verbose(“getpwuid [%d] failed, error: %sn”, login_info->uid,
strerror(errno));
return -1;
}
login_info->login = pw->pw_name;
spw = getspnam(pw->pw_name);
}else{
return -1;
}
if(!spw){
fprintf(stderr, “unable to read shadow passwd info: %sn”,
strerror(errno));
return -1;
}
if(login_info->auth_type == AUTH_TYPE_AUTO){
if(strncmp(spw->sp_pwdp, “$”, 3) == 0){ /* GNU extension, md5 used */
return auth_md5(login_info->passwd, spw->sp_pwdp);
}else{
return auth_des(login_info->passwd, spw->sp_pwdp);
}
}else if(login_info->auth_type == AUTH_TYPE_DES){
return auth_des(login_info->passwd, spw->sp_pwdp);
}else if(login_info->auth_type == AUTH_TYPE_MD5){
return auth_md5(login_info->passwd, spw->sp_pwdp);
}else{
verbose(“unknown auth type: %dn”, login_info->auth_type);
return -1;
}
}
/**
* checkpasswd */ int check_passwd(login_info_t* login_info) { struct passwd* pw; if(login_info->login){ pw = getpwnam(login_info->login); if(!pw){ verbose(“getpwnam [%s] failed, error: %sn”, login_info->login, strerror(errno)); return -1; } login_info->uid = pw->pw_uid; }else if(login_info->uid >= 0){ pw = getpwuid(login_info->uid); if(!pw){ verbose(“getpwuid [%d] failed, error: %sn”, login_info->uid, strerror(errno)); return -1; } login_info->login = pw->pw_name; }else{ return -1; } if(!login_info->passwd){ verbose(“no password specified!n”); return -1; } if(login_info->auth_info == AUTH_INFO_AUTO){ if(strlen(pw->pw_passwd) < 2){ if(strcmp(pw->pw_passwd, “x”) == 0){ /* shadow password used */ return check_shadowed_passwd(login_info); }else{ return -1; } } return auth_des(login_info->passwd, pw->pw_passwd); }else if(login_info->auth_info == AUTH_INFO_PASSWD){ return auth_des(login_info->passwd, pw->pw_passwd); }else if(login_info->auth_info == AUTH_INFO_SHADOW){ return check_shadowed_passwd(login_info); }else{ verbose(“unknown auth info: %dn”, login_info->auth_info); return -1; } } void handle_args(int argc, char* argv[]) { int ch; int option_index; while((ch = getopt_long(argc, argv, “u:i:p:Vvh”, opt_options, &option_index)) != -1){ switch(ch){ case 'u': login_info.login = optarg; break; case 'i': login_info.uid = atoi(optarg); break; case 'p': login_info.passwd = optarg; break; case 'h': help; exit(0); break; case 'V': version(); exit(0); break; case 'v': verbose_flag = 1; break; case '?': default: help(); exit(1); break; } } if(!login_info.passwd){ fprintf(stderr, “please specifie login passwordn”); help(); exit(1); } if(!login_info.login && !login_info.uid){ fprintf(stderr, “please specifie either login name or user idn”); help(); exit(1); } } int main(int argc, char* argv[]) { int ret; const char seperator[] = “==========================================================================================n”; int retcode = 1; handle_args(argc, argv); printf(seperator); ret = check_passwd(&login_info); if(ret < 0){ fprintf(stderr, “3[1;31mauthentication failed for user: ” “[%s], uid[%d], password: [%s]3[mn”, login_info.login, login_info.uid, login_info.passwd); goto quit; }else if(ret == 0){ printf(“3[1;32mauthenticated token suclearcase/” target=“_blank” >ccessfully, user: “ ”[%s], uid: [%d]3[mn“, login_info.login, login_info.uid); retcode = 0; }else{ assert(0); retcode = -1; } quit: printf(seperator); exit(retcode); } 原文转自:www.ltesting 和属性类似,方法也分实例方法和类方法, 在class中定义的全部是实例方法,实例方法第一个参数self是实例本身。 要在class中定义类方法,需要这么写: class Person(object): count = 0 @classmethod def how_many(cls): return cls.count def __init__(self, name): self.name = name Person.count = Person.count + 1print Person.how_many()p1 = Person('Bob')print Person.how_many() 通过标记一个 @classmethod,该方法将绑定到Person类上,而非类的实例。类方法的第一个参数将传入类本身,通常将参数名命名为cls,上面的cls.count实际上相当于Person.count, 因为是在类上调用,而非实例上调用,因此类方法无法获得任何实例变量,只能获得类的引用。 任务 如果将类属性count改为私有属性__count,则外部无法读取__score,但可以通过一个类方法获取,请编写类方法获得__count值。 注意类方法需要添加 @classmethod 参考代码: class Person(object): __count = 0 @classmethod def how_many(cls): return cls.__count def __init__(self, name): self.name = name Person.__count = Person.__count + 1print Person.how_many()p1 = Person('Bob')print Person.how_many()
这篇文章主要介绍了Python简单日志处理类分享,本文直接给出实现代码,需要的朋友可以参考下 简单的一个python日志处理类 代码如下: #/usr/bin/python #coding=utf-8 import time,types class logsys: def __init__(self, project, logfilename = ‘sys_log.txt‘): self.project = project self.logfilename = logfilename def get_log_time(self): return time.strftime(”%Y-%m-%d %X“, time.localtime) def write2file(self, *formart): s = self.formart_string(*formart) if s: encoding = ‘utf8‘ ut = open(self.logfilename, ‘a+‘) out.write(s + ”n“) out.close() else: pass def formart_string(self, *formart): string = ‘‘ encoding = ‘utf8‘ for str in formart: if not type(str) in [types.UnicodeType, types.StringTypes, types.StringType]: s = repr(str) else: s = str if type(s) == type(u‘‘): string += s.encode(encoding) + ”t“ else: string += s + ”t" return string def w(self,notice,*formart): self.write2file(self.get_log_time(), ‘[‘ + notice + ‘]‘, self.project, *formart) 模拟linux的cat命令,打印从命令行输入的文件名 #!/usr/bin/python#Filename:cat.pyhelpString = '''This program prints files to the standard output.Any number of files can be specified.Options include:--version : Prints the version number--help : Display this help'''import sysdef readfile(filename): '''Print a file to the standard output.''' f = file(filename) while True: line = f.readline() if len(line) == 0:break print line, f.close()#Script. start from hereif len(sys.argv) < 2: print 'No action specified.' sys.exit()if sys.argv[1].startswith('--'): ption = sys.argv[1][2:] if ption == 'version' or ption == 'v': print 'Version 1.2' elif ption == 'help' or ption == 'h': print helpString else: print 'Unknown option.' sys.exit()else: for filename in sys.argv[1:]: readfile(filename)print 'Done'
-04-04Python删除指定目录下过期文件的2个脚本分享 2014-01-01paramiko模块安装和使用(远程登录服务器) -11-11python线程池的实现实例 2014-01-01python实现人人网登录示例分享 2014-04-04Python设计模式之观察者模式实例 -05-05400多行Python代码实现了一个FTP服务器 -09-09Python 字符串定义 2013-08-08pytyon 带有重复的全排列 2014-04-0435个Python编程小技巧 2014-06-06python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、Beau python异步任务队列示例 使用python实现baidu hi自动登录的代码 Python 命令行非阻塞输入的小例子 python 布尔操作实现代码 Python continue语句用法实例 Python 过滤字符串的技巧,map与itertools Python中文件遍历的两种方法 python获取豆瓣电影简介代码分享 wxpython 最小化到托盘与欢迎图片的实现方 python文件和目录操作函数小结 Python入门教程 超详细1小时学会 python 中文乱码问题深入分析 比较详细Python正则表达式操作指 Python字符串的encode与decode研 Python open读写文件实现脚本 Python enumerate遍历数组示例应 Python 深入理解yield Python+Django在windows下的开发 python 字符串split的用法分享 python 文件和路径操作函数小结 2012-05-05ssh批量登录并执行命令的python实现代码 2013-02-02python登录QQ邮箱发信的实现代码 2013-03-03python中定义结构体的方法 2012-08-08Python模块学习filecmp 文件比较 2014-02-02python实现ftp客户端示例分享 2014-04-04Python操作sqlite3快速、安全插入数据(防注入)的实例 2014-05-05Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好) 2013-12-12python批量修改文件后缀示例代码分享 2013-12-12python获取beautifulphoto随机某图片代码实例 2014-02-02python基础教程之udp端口扫描
篇5:Python定义类方法
篇6:Python简单日志处理类
篇7:Python:模拟linux命令cat
篇8:Python SQLite3数据库操作类
篇9:Python SQLite3数据库操作类
最近更 新
热 点 排 行
篇10:Python实现类继承实例
更多推荐
一个常用的Python模拟登陆类
发布评论