使用jenkins传递字符参数,参数为url时报错--xxx 不是内部或外部命令,也不是可运行的程序(url中包含保留字符)

错误:

 

问题分析:

1.当直接把1个url当作一个字符串传递时,url中的保留符号(&)会导致程序出错


2.在url中特殊符号都有特殊意义或者被认为是不安全的字符,所以在拼接url时应当做替换处理。

RFC3986文档规定,Url中只允许包含以下四种:

                   1、英文字母(a-zA-Z)

                   2、数字(0-9)

                   3、-_.~ 4个特殊字符

                   4、所有保留字符,RFC3986中指定了以下字符为保留字符(英文字符):     ! * ' ( ) ; : @ & = + $ , / ? # [ ]

Url编码通常也被称为百分号编码(Url Encoding,also known as percent-encoding),是因为它的编码方式非常简单,使用%百分号加上两位的字符。Url编码默认使用的字符集是US-ASCII。例如a在US-ASCII码中对应的字节是0x61,那么Url编码之后得到的就是%61。同理,参看如下图ASCII表,#应该被替换处理为%23

 

解决办法:

把要通过jenkins传递的url先进行url-encode编码,在具体使用到该参数的时候,再进行urldecode解码

#导入依赖包
import urllib.parse
#要通过jenkins传递的url
url ='http://jira.xxxxx.com/secure/RapidBoard.jspa?rapidView=187&projectKey=OFFICIAL&selectedIssue=OFFICIAL-5837'

先编码

#urlencode编码
data = urllib.parse.quote(url)

输出结果:

'http%3A//jira.XXXX.com/secure/RapidBoard.jspa%3FrapidView%3D187%26projectKey%3DOFFICIAL%26selectedIssue%3DOFFICIAL-5837'

解码

finall_url=urllib.parse.unquote(data)

输出结果:

和未编码之前一样就对了

'http://jira.XXX.com/secure/RapidBoard.jspa?rapidView=187&projectKey=OFFICIAL&selectedIssue=OFFICIAL-5837'

再试试用jenkins传递 编码后的url就不会报错了

 

 

参考文档

get请求中url参数值包含#特殊字符则需要做替换处理

Python urlencode和unquote函数使用实例解析

posted @ 2020-05-19 09:08  wangju003  阅读(1158)  评论(0编辑  收藏  举报