第一步
先用脚本实现基本的md5验证
1、python如何实现文件的下载
方法一:
使用 urllib 模块提供的 urlretrieve() 函数。urlretrieve() 方法直接将远程数据下载到本地。
urlretrieve(url, [filename
=
None
, [reporthook
=
None
, [data
=
None
]]])
说明:
参数 finename 指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。
参数 reporthook 是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。
参数 data 指 post 到服务器的数据,该方法返回一个包含两个元素的(filename, headers)元组,filename 表示保存到本地的路径,header 表示服务器的响应头。
实例:
#!/usr/bin/python #encoding:utf-8 import urllib import os def Schedule(a,b,c): ''''' a:已经下载的数据块 b:数据块的大小 c:远程文件的大小 ''' per = 100.0 * a * b / c if per > 100 : per = 100 print '%.2f%%' % per url = 'http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2' #local = url.split('/')[-1] local = os.path.join('/data/software','Python-2.7.5.tar.bz2') urllib.urlretrieve(url,local,Schedule) ######output###### #0.00% #0.07% #0.13% #0.20% #.... #99.94% #100.00%
方法二:
使用urllib的urlopen()函数
实例:
import urllib2 print "downloading with urllib2" url = 'http://.pythontab.com/test/demo.zip' f = urllib2.urlopen(url) data = f.read() with open("demo2.zip", "wb") as code: code.write(data)
方法三:
使用requests模块
实例:
import requests print "downloading with requests" url = 'http://ww.pythontab.com/test/demo.zip' r = requests.get(url) with open("demo3.zip", "wb") as code: code.write(r.content)
2、脚本的基本功能实现
#python3 import os import sys import hashlib import requests #获取到文件然后md5验证 def GetFile(ip_or_list,url): proxie = {} if os.path.isfile(ip_or_list) and not os.path.isfile(url): with open(ip_or_list) as f: for ip in f: if ip.strip() == '': continue proxie['http'] = 'http://%s:80'%ip.strip() file = requests.get(url, proxies=proxie, timeout=20) md5 = hashlib.md5() md5.update(file.content) print('IP:%s ===== MD5:%s'%(ip,md5.hexdigest())) return 'done' elif os.path.isfile(ip_or_list) and os.path.isfile(url): with open(url) as f: for single_url in f: print('验证URL:',single_url) with open(ip_or_list) as t: for ip in t: if ip.strip() == '' or single_url.strip() == '': continue proxie['http'] = 'http://%s:80' % ip.strip() file = requests.get(single_url, proxies=proxie, timeout=20) md5 = hashlib.md5() md5.update(file.content) print('IP:%s ===== MD5:%s' % (ip, md5.hexdigest())) else: proxie = { 'http': 'http://%s:80'%ip_or_list.strip() } file = requests.get(url,proxies = proxie,timeout = 20) md5 = hashlib.md5() md5.update(file.content) return 'IP:%s ===== MD5:%s'%(ip_or_list,md5.hexdigest()) #验证大文件的MD5,没有用到 def GetFileMd5(filename): if not os.path.isfile(filename): return '传入的MD5验证文件有误' md5 = hashlib.md5() f = open(filename,'rb') while True: b = f.read(1024) if not b: break md5.update(b) f.close() return md5.hexdigest() if __name__ == '__main__': if len(sys.argv) == 3: if os.path.isfile(sys.argv[1]) and os.path.isfile(sys.argv[2]): #python ip.list + url.list print('[ip.list & url.list]开始验证边缘节点') res = GetFile(sys.argv[1],sys.argv[2]) print(res) else: origin_ip, url = sys.argv[1:3] print('验证源站md5:') res = GetFile(origin_ip,url) print(res) print('验证边缘节点MD5') ip_list = 'ip.list' #需要遍历的边缘节点列表 res1 = GetFile(ip_list,url) print(res1) else: print('Format:script + origin_IP + URL')
第二步
页面话操作实现,后面跟进.....