使用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函數使用實例解析


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM