多线程校验url的种种。。。
东西不经常看就容易忘,这两天抽空写了一个补丁库url验证工具,挺曲折的,记录一下
需求大概流程如下:转换补丁库为xml,解析xml得到所有url,多线程校验url。
就不到100行有效代码,断断续续写了三天才完成:
1、调用dll,忘记了参数类型对应的ctype类型
2、解析xml,没有搞清楚需求,以为要解析json,所以写了一个解析json的函数,最后发现没用上。中间解析json、xml的方法又看了一下资料才能拣起来
3、多线程,忘记传参数的方法
4、校验url,本来自己写了几种方法,结果发现还是老外的方法好一点。。。
def anyTrue(a, b):
return True in map(a, b) def file_exists1(url,folder):
for i in range(len(url)):
request = urllib2.Request(str(url[i]))
request.get_method = lambda : 'HEAD'
try:
response = urllib2.urlopen(request)
continue
except Exception,info:
# print info
ff = open(folder+ '/' + 'fail.txt','a')
ff.write(url[i]+'----'+str(info)+'\n')
continue
def filterFilesxml(folder, exts):
b=[]
for fileName in os.listdir(folder):
if os.path.isdir(folder + '/' + fileName):
filterFiles(folder + '/' + fileName, exts)
elif anyTrue(fileName.endswith, exts):
sourceFile = codecs.open(folder + '/' + fileName,mode='r')
xmlContentStr = sourceFile.read()
xmlContentStr = xmlContentStr.decode('gb2312').encode('utf-8')
xmlContentStr = xmlContentStr.replace('encoding="gb2312"','encoding="utf-8"')
sourceXML = xml.dom.minidom.parseString(xmlContentStr)
root = sourceXML.documentElement
cnlist = root.getElementsByTagName('cnlink')
for i in xrange(0,len(cnlist)):
for ii in cnlist[i].firstChild.data.split(';'):#有的值带有多条数据用;拼接,所以这里要分割一下
b.append(ii)
enlist = root.getElementsByTagName('enlink')
for i in xrange(0,len(enlist)):
for ii in enlist[i].firstChild.data.split(';'):
b.append(ii)
tclist = root.getElementsByTagName('tclink')
for i in xrange(0,len(tclist)):
for ii in tclist[i].firstChild.data.split(';'):
b.append(ii)
b=list(set(b))#去重
return b def leakdattoleakxml(folder):
exts_dat= ['.dat']
func=cdll.LoadLibrary(os.path.dirname(os.path.abspath(sys.argv[0]))+r'\libleak_analyze.dll')
get_xml_from_dat2 = func.get_xml_from_dat
get_xml_from_dat2.argtypes = [c_wchar_p,c_wchar_p]
get_xml_from_dat2.restype = c_int
for fileName in os.listdir(folder):
if os.path.isdir(folder + '/' + fileName):
filterFiles(folder + '/' + fileName, exts_dat)
elif anyTrue(fileName.endswith, exts_dat):
get_xml_from_dat2(folder + '/' + fileName , folder + '/' + fileName +'.xml' )
return True def perf1(folder):
exts_json = ['.json']
exts_xml = ['.xml']
# urls = filterFiles(folder, exts_json)##解析json
urls = filterFilesxml(folder, exts_xml)##解析xml
tsk = []
for i in range(100):#并发数
# print urls[i*100:i*100+100]#用列表是为了让每个线程跑多个url,而不用每个线程都只跑一个url
t = threading.Thread(target=file_exists1,args=(urls[i*100:i*100+100],folder,))
t.start()#启动线程
tsk.append(t)
for tt in tsk:##用.join tsk表示所有线程执行完毕后,主线程才返回(从下面的end输出时间可以看出),它的缺点是大大降低线程执行效率,但是对于用multiprocessing.Process调用时比较有用,否则主线程返回后,改进程会被立即退出。如果是直接执行perf1(),建议不要用join
tt.join()
print 'end' if __name__ == '__main__':
##把dat转成xml
aa=THEREALPATH
if leakdattoleakxml(aa):
perf1(aa)
多线程校验url的种种。。。的更多相关文章
- 第39天学习打卡(UDP多线程在线咨询 URL)
UDP多线程在线咨询 package com.kuang.chat; import java.io.BufferedReader; import java.io.InputStreamReade ...
- 正则表达式校验URL
正则表达式: var match = /^((ht|f)tps?):\/\/([\w-]+(\.[\w-]+)*\/?)+(\?([\w\-\.,@?^=%&:\/~\+#]*)+)?$/; ...
- Java实现多线程下载 URL以及URLConnection
主线程: public class MultiThreadDown { public static void main(String[] args) throws Exception{ //初始化Do ...
- 校验 url 是否以http 或者https 开头
var reUrl01 = /^((ht|f)tps?):\/\/([\w-]+(\.[\w-]+)*\/?)+(\?([\w\-\.,@?^=%&:\/~\+#]*)+)?$/; var r ...
- SpringCloud(8)---zuul权限校验、接口限流
zuul权限校验.接口限流 一.权限校验搭建 正常项目开发时,权限校验可以考虑JWT和springSecurity结合进行权限校验,这个后期会总结,这里做个基于ZuulFilter过滤器进行一个简单的 ...
- 微信企业号开发(1)WebAPI在回调模式中的URL验证
微信回调模式的官方文档. 开发语言:C#(微信相关功能代码可以从官网下载) 首先,必须要明确几个参数,这几个参数在微信企业号中,每次调用都会使用到. 1.msg_signature:签名(已加密,加密 ...
- 【转】浏览器中的data类型的Url格式,data:image/png,data:image/jpeg!
所谓"data"类型的Url格式,是在RFC2397中 提出的,目的对于一些"小"的数据,可以在网页中直接嵌入,而不是从外部文件载入.例如对于img这个Tag, ...
- Android之利用正则表达式校验邮箱、手机号、密码、身份证号码等
概述 现在Android应用在注册的时候基本会校验邮箱.手机号.密码.身份证号码其中一项或多项,特此收集了相关的正则表达式给大家分享.除了正则表达式,文章末尾提供Demo中有惊喜哦! 具体验证的图片效 ...
- java基础知识3--如何获取资源文件(Java中获取资源文件的url)
java开发中,常见的resource文件有:.xml,.properties,.txt文件等,后台开发中经常用到读取资源文件,处理业务逻辑,然后返回结果. 获取资源文件的方法说明getResourc ...
随机推荐
- JSON.stringify 语法实例讲解+easyui data-options属性+expires【申明:来源于网络】
JSON.stringify 语法实例讲解+easyui data-options属性+expires[申明:来源于网络] JSON.stringify 语法实例讲解:http://www.jb51. ...
- Robot Framework 1
about Robot, learnt from the following document, perfect document !!!! http://www.virtuousprogrammer ...
- 数据结构day1:排序
1,冒泡排序算法的python实现 def bubble_sort(alist): pass count = len(alist)-1 for index in range(count,0,-1): ...
- Elasticsearch学习笔记(九)partial update
一.什么是partial update? PUT /index/type/id,创建文档&替换文档,就是一样的语法 一般对应到应用程序中,每次的执行流程基本是这样的: (1)应用程序先发起一个 ...
- XXL-JOB之本地环境搭建
一.源码下载 1.官网地址 登录以下地址查看详细搭建步骤: https://www.cnblogs.com/xuxueli/p/5021979.html 2.下载源码 根据1中打开的页面,下载源码,如 ...
- Pubmed/PMC/Meline的异同点【转载】
转自:http://paper.dxy.cn/article/495034 一.PubMed.PMC 和 MEDLINE 到底有什么区别和联系? 可以看出,PubMed的收录范围是最广的:三个都是生物 ...
- windows slaver 脚本执行xcopy 报错无效驱动器规格
jenkins上配置的windows slaver机器如下: 我用这台windows 机器作为slaver机器来编译pc的exe包,但是在最后归档包倒ftp上时报错,如下: 但是我直接在windows ...
- [LeetCode] 132. Palindrome Partitioning II_ Hard tag: Dynamic Programming
Given a string s, partition s such that every substring of the partition is a palindrome. Return the ...
- Random Forest总结
一.简介 RF = Bagging + Decision Tree 随机:数据采样随机,特征选择随机 森林:多个决策树并行放在一起 几个误区: 不是每棵树随机选择特征,而是每一个结点都随机选择固定数目 ...
- node中处理异步常用的方法,回调函数和events 模块处理异步
// npm install -g supervisor supervisor http.js就可以实现热更新的效果 //引入http模块 var http = require('http'); va ...