一、hashlib
hashlib 模块主要用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法。
实例代码:
importhashlib######### md5 ########
hash =hashlib.md5()#help(hash.update)
hash.update(bytes('admin', encoding='utf-8'))print(hash.hexdigest())print(hash.digest())######## sha1 ########
hash=hashlib.sha1()
hash.update(bytes('admin', encoding='utf-8'))print(hash.hexdigest())######### sha256 ########
hash=hashlib.sha256()
hash.update(bytes('admin', encoding='utf-8'))print(hash.hexdigest())######### sha384 ########
hash=hashlib.sha384()
hash.update(bytes('admin', encoding='utf-8'))print(hash.hexdigest())######### sha512 ########
hash=hashlib.sha512()
hash.update(bytes('admin', encoding='utf-8'))print(hash.hexdigest())
以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。
importhashlib######### md5 ########
hash= hashlib.md5(bytes('898oaFs09f',encoding="utf-8"))
hash.update(bytes('admin',encoding="utf-8"))print(hash.hexdigest())
python内置还有一个 hmac 模块,它内部对我们创建 key 和 内容 进行进一步的处理然后再加密。
importhmac
h= hmac.new(bytes('898oaFs09f',encoding="utf-8"))
h.update(bytes('admin',encoding="utf-8"))print(h.hexdigest())
二、requests
Python标准库中提供了:urllib等模块以供Http请求,但是,它的 API 太渣了。它是为另一个时代、另一个互联网所创建的。它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务。
importurllib.request
f=urllib.request.urlopen('http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=424662508')
result= f.read().decode('utf-8')
importurllib.request
req= urllib.request.Request('http://www.example.com/')
req.add_header('Referer', 'http://www.python.org/')
r=urllib.request.urlopen(req)
result= f.read().decode('utf-8')
Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得美好了许多,使用Requests可以轻而易举的完成浏览器可有的任何操作。
使用:
1 #1、无参数实例
2
3 importrequests4
5 ret = requests.get('https://github.com/timeline.json')6
7 print(ret.url)8 print(ret.text)9
10
11
12 #2、有参数实例
13
14 importrequests15
16 payload = {'key1': 'value1', 'key2': 'value2'}17 ret = requests.get("http://httpbin.org/get", params=payload)18
19 print(ret.url)20 print(ret.text)21
22 GET请求
GET请求
1 #1、基本POST实例
2
3 importrequests4
5 payload = {'key1': 'value1', 'key2': 'value2'}6 ret = requests.post("http://httpbin.org/post", data=payload)7
8 print(ret.text)9
10
11 #2、发送请求头和数据实例
12
13 importrequests14 importjson15
16 url = 'https://api.github.com/some/endpoint'
17 payload = {'some': 'data'}18 headers = {'content-type': 'application/json'}19
20 ret = requests.post(url, data=json.dumps(payload), headers=headers)21
22 print(ret.text)23 print(ret.cookies)24
25 POST请求
POST请求
1 requests.get(url, params=None, **kwargs)2 requests.post(url, data=None, json=None, **kwargs)3 requests.put(url, data=None, **kwargs)4 requests.head(url, **kwargs)5 requests.delete(url, **kwargs)6 requests.patch(url, data=None, **kwargs)7 requests.options(url, **kwargs)8
9 #以上方法均是在此方法的基础上构建
10 requests.request(method, url, **kwargs)11
12 其他请求
其他请求
实例演示:
1 实例:查看火车停靠信息2
3 importurllib4 importrequests5 from xml.etree importElementTree as ET6
7 #使用内置模块urllib发送HTTP请求,或者XML格式内容
8 """
9 f = urllib.request.urlopen('http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx/getDetailInfoByTrainCode?TrainCode=G666&UserID=')10 result = f.read().decode('utf-8')11 """
12
13 #使用第三方模块requests发送HTTP请求,或者XML格式内容
14 r = requests.get('http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx/getDetailInfoByTrainCode?TrainCode=G666&UserID=')15 result =r.text16
17 #解析XML格式内容
18 root =ET.XML(result)19 for node in root.iter('TrainDetailInfo'):20 print(node.find('TrainStation').text,node.find('StartTime').text,node.tag,node.attrib)
实例:查看火车停靠信息
三、paramiko
paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现实。
1、下载安装:
pycrypto,由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto
pip3 install pycrypto
pip3 install paramiko
2、模块使用:
1 #!/usr/bin/env python
2 #coding:utf-8
3
4 importparamiko5
6 ssh =paramiko.SSHClient()7 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())8 ssh.connect('192.168.1.108', 22, 'alex', '123')9 stdin, stdout, stderr = ssh.exec_command('df')10 printstdout.read()11 ssh.close();12
13 执行命令 - 用户名+密码
importparamiko
private_key_path= '/home/auto/.ssh/id_rsa'key=paramiko.RSAKey.from_private_key_file(private_key_path)
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('主机名', 端口, '用户名', key)
stdin, stdout, stderr= ssh.exec_command('df')printstdout.read()
ssh.close()
执行命令- 密钥
importos,sysimportparamiko
t= paramiko.Transport(('182.92.219.86',22))
t.connect(username='wupeiqi',password='123')
sftp=paramiko.SFTPClient.from_transport(t)
sftp.put('/tmp/test.py','/tmp/test.py')
t.close()importos,sysimportparamiko
t= paramiko.Transport(('182.92.219.86',22))
t.connect(username='wupeiqi',password='123')
sftp=paramiko.SFTPClient.from_transport(t)
sftp.get('/tmp/test.py','/tmp/test2.py')
t.close()
上传或下载文件- 用户名+密码
importparamiko
pravie_key_path= '/home/auto/.ssh/id_rsa'key=paramiko.RSAKey.from_private_key_file(pravie_key_path)
t= paramiko.Transport(('182.92.219.86',22))
t.connect(username='wupeiqi',pkey=key)
sftp=paramiko.SFTPClient.from_transport(t)
sftp.put('/tmp/test3.py','/tmp/test3.py')
t.close()importparamiko
pravie_key_path= '/home/auto/.ssh/id_rsa'key=paramiko.RSAKey.from_private_key_file(pravie_key_path)
t= paramiko.Transport(('182.92.219.86',22))
t.connect(username='wupeiqi',pkey=key)
sftp=paramiko.SFTPClient.from_transport(t)
sftp.get('/tmp/test3.py','/tmp/test4.py')
t.close()
上传或下载文件- 密钥