• python 模块部分补充知识


    一、hashlib

     hashlib 模块主要用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法。

    实例代码:

    import hashlib
     
    # ######## 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再来做加密。

    import hashlib
     
    # ######## md5 ########
     
    hash = hashlib.md5(bytes('898oaFs09f',encoding="utf-8"))
    hash.update(bytes('admin',encoding="utf-8"))
    print(hash.hexdigest())

    python内置还有一个 hmac 模块,它内部对我们创建 key 和 内容 进行进一步的处理然后再加密。

    import hmac
     
    h = hmac.new(bytes('898oaFs09f',encoding="utf-8"))
    h.update(bytes('admin',encoding="utf-8"))
    print(h.hexdigest())

    二、requests

        Python标准库中提供了:urllib等模块以供Http请求,但是,它的 API 太渣了。它是为另一个时代、另一个互联网所创建的。它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务。    

    import urllib.request
    
    f=urllib.request.urlopen('http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=424662508')
    result = f.read().decode('utf-8')
    import urllib.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 import requests
     4  
     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 import requests
    15  
    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 import requests
     4  
     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 import requests
    14 import json
    15  
    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 import urllib
     4 import requests
     5 from xml.etree import ElementTree as ET
     6 
     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.text
    16 
    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 import paramiko
     5 
     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 print stdout.read()
    11 ssh.close();
    12 
    13 执行命令 - 用户名+密码
    import paramiko
    
    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')
    print stdout.read()
    ssh.close()
    
    执行命令 - 密钥
    import os,sys
    import paramiko
    
    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()
    
    
    import os,sys
    import paramiko
    
    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()
    
    上传或下载文件 - 用户名+密码
    import paramiko
    
    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()
    
    import paramiko
    
    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()
    
    上传或下载文件 - 密钥
  • 相关阅读:
    可遇不可求的Question之过滤单词字符的正则表达式\w的疑义
    可遇不可求的Question之DBNull.Value.ToString()
    可遇不可求的Question之MYSQL的10060和10061错误篇
    可遇不可求的Question之正在中止线程异常
    可遇不可求的Question之类型初始值设定项引发异常篇
    可遇不可求的Question之调用的目标发生了异常篇
    可遇不可求的Question之要复制的 LOB 数据的长度超出了配置的最大值篇
    熱海へ
    CC的留言
    研发才是硬道理钢铁侠的评论(摘自豆瓣)
  • 原文地址:https://www.cnblogs.com/haishiniu123/p/7157924.html
Copyright © 2020-2023  润新知