Python替换url内参数值的方式是什么,python替换url内参,大家好,我是python


大家好,我是python新手,想写一个测试目录遍历的小脚本,遇到了问题,求各位大牛指教!

python 2.7.8 windows 7 x64位

测试url:http://www.waitalone.cn/index.php?id=123&abc=456&xxx=ooo

其实参数名值对个数不是固定的,这里我只是以3个为准测试。

payloads = ('../boot.ini','../etc/passwd','../windows/win.ini','../../boot.ini','../../etc/passwd')

我想要实现的是这样的功能,首先遍历payloads,然后使用其payload替换url中的参数值,但是要在替换第一个参数值的时候其它两个或者多个参数名值对保护不变,举例如下:

http://www.waitalone.cn/index.php?id=../boot.ini&abc=456&xxx=ooo
http://www.waitalone.cn/index.php?id=../etc/passwd&abc=456&xxx=ooo
.....
http://www.waitalone.cn/index.php?id=../../etc/passwd&abc=456&xxx=ooo

当替换第2个参数值的时候其它的不变:

http://www.waitalone.cn/index.php?id=123&abc=../boot.ini&xxx=ooo
...
http://www.waitalone.cn/index.php?id=123&abc=../../etc/passwd&xxx=ooo

第3个或者多个参数名值对同上面。。

我只知道如何一次性的把所有的参数值给替换掉,但是不知道如何保持其它两个不变,求大牛们指教!

http://stackoverflow.com/questions/4656843/jquery-get-querystring-from-url

创建方法时第一个传参数为你的payloads,第二个参数和第三个参数设为带默认值的参数例如

def test(payloads,abc='456',xxx='123')

调用的时候只需要给第一个参数,因为第二,第三个参数都是由默认值的.
当然你也可以用python的可变参数或关键参数.

已经搞定了,详情代码如下:
http://www.waitalone.cn/replace-url-params.html

def url_values_plus(url, vals):ret = []u = urlparse.urlparse(url)qs = u.querypure_url = url.replace('?'+qs, '')qs_dict = dict(urlparse.parse_qsl(qs))for val in vals:    for k in qs_dict.keys():        tmp_dict = copy.deepcopy(qs_dict)        tmp_dict[k] = val        tmp_qs = urllib.unquote(urllib.urlencode(tmp_dict))        ret.append(pure_url + "?" + tmp_qs)return ret

是这样么? (python3.x)

url = 'http://www.waitalone.cn/index.php?id=%s&abc=%s&xxx=%s'
payloads = ['../boot.ini', '../etc/passwd', '../windows/win.ini', '../../boot.ini', '../../etc/passwd']

def f(id='123', abc='456', xxx='000') :
print(url % (id, abc, xxx))

for payload in payloads :
f(id=payload)
f(abc=payload)
f(xxx=payload)

就是@MIllyn说的方法

import urlparsedef url_replacer(url, _id, target_value):    c_url_list = list(urlparse.urlparse(url))    queries = [q.split('=') for q in c_url_list[4].split('&')]    queries[_id - 1][1] = target_value    c_url_list[4] = '&'.join(map(lambda l: '='.join(l), queries))    return urlparse.urlunparse(c_url_list)print url_replacer('http://www.waitalone.cn/index.php?id=../boot.ini&abc=456&xxx=ooo', 2, '123')

虽然实现了,但是很别扭。。不知道有没有第三方库提供这个功能

编橙之家文章,

评论关闭