去年写的一个小脚本,当时需求是为了及时屏蔽掉非法信息url,待客服部门确认后,再解封或者继续封锁,免得网监拔线。
这个是最初的脚本,后来写了一个restful服务(web.py写的),便于公司内部客服管理系统使用,restful服务暂时不贴了
在本脚本中利用到python的urlparse方法来提取出链接的uri,这样方便替换:
关于urlparse的用法:
在这里直接粘贴的是ipython的交互式输入输出,各位看官相信也已了然了,
In [1]: from urlparse import urlparse
In [2]: out = urlparse('http://daxuxu.info/2011/05/nginx-deny-some-invalid-url.html')
In [3]: out
Out[3]: ParseResult(scheme='http', netloc='daxuxu.info', path='/2011/05/nginx-deny-some-invalid-url.html', params='', query='', fragment='')
In [4]: out[0]
Out[4]: 'http'
In [5]: out[1]
Out[5]: 'daxuxu.info'
In [6]: out[2]
Out[6]: '/2011/05/nginx-deny-some-invalid-url.html'
该功能脚本程序如下:
#!/usr/bin/python
# coding: UTF-8
#@author: rui.xu <mrhaigui@gmail.com>
#Filename:
import os
import time
import datetime
import sys
import re
from urlparse import urlparse
def update_conf(url):
out= urlparse(url)
uri=out[2]
print uri
#if tryUri(uri):
# print "url is illegality"
#else:
startTime = time.localtime()
strStartTime = time.strftime('%Y%m%d%H%M%S', startTime)
fileName = '/home/xr/url_filter_rest/'+'deny_'+strStartTime+'.conf'
#fileName = 'deny_'+strStartTime+'.conf'
f_ng_conf = open(fileName,'w')
line1_head = 'if ($request_uri = "'
line1_end = '"){'
line1=line1_head+uri+line1_end
#line2 = ' return 403;'
line2 = ' rewrite ^ http://www.domain.com/error.html;'
line3 = '}'
print line1
print line2
print line3
f_ng_conf.write(line1+"\n"+line2+"\n"+line3+"\n")
f_ng_conf.close()
return fileName
def tryUri(path):
orc='css|js|css|png|jpeg|jpg|gif'
if path == '/':
return True
if re.search(orc,path):
print "Match"
return True
else:
print "Not Match"
return False
def main():
inputUrl = sys.argv[1]
update_conf(inputUrl)
if __name__ == '__main__':
main()