当我用参数传递jenkins url并用curl命令调用时,我如何在password中使用^和&

h79rfbju  于 2023-10-17  发布在  Jenkins
关注(0)|答案(1)|浏览(131)

我试图调用如下的Python脚本,我已经导入了所有需要的库我有命令变量如下和函数如下

def Start_Job(command):
    global job_start_date
    print("\n----------------- Run Command -----------------\n" + command)   
    job_start_date = datetime.now()
    print("\n job_start_date = " + str(job_start_date) + "\n")
    try:
        os.system(command)
        print("\n-------- Wait for 100 seconds ---------------------") 
        time.sleep(100)
    except Exception as e:
        print("Error in Start_Job [" , str(e) , "]")

command = 'curl --insecure -u admin:G^H&j8k9G^H&j8k9 "https://expert_solution.net.plm.eds.com/job/Amar/job/WaitingTest/buildWithParameters?token=simdevops&Machine_Name=iltlvinteg6"'

Start_Job(command)

当我调用Start_Job()函数时,由于密码中的&将密码分为两部分,第一部分是j8k9G^H,第二部分是j8k9,所以密码不能以正确的方式分配,否则^在命令中处理得不好。请任何人都可以给予适当的解决办法或分享提示这个问题
首先,我尝试了urllib.parse.quote(pass_word),这是行不通的。我也尝试了其他技术,但没有成功。

uurity8g

uurity8g1#

应该使用百分比编码对这些特殊字符进行编码。
在Python中,在构造URL之前,必须使用urllib.parse.quote函数对用户名和密码进行正确编码。如果它不为您工作,它将不会正确地完成您需要的功能。

import os
import time
from datetime import datetime
import urllib.parse

def Start_Job(username, password, jenkins_url):
    global job_start_date
    # Encode the username and password
    encoded_username = urllib.parse.quote(username, safe='')
    encoded_password = urllib.parse.quote(password, safe='')

    # Construct the URL with encoded username and password
    url = f'https://{encoded_username}:{encoded_password}@{jenkins_url}'
    
    print("\n----------------- Run Command -----------------\n" + url)   
    job_start_date = datetime.now()
    print("\n job_start_date = " + str(job_start_date) + "\n")
    try:
        os.system(f'curl --insecure "{url}"')
        print("\n-------- Wait for 100 seconds ---------------------") 
        time.sleep(100)
    except Exception as e:
        print("Error in Start_Job [" , str(e) , "]")

# Define your Jenkins URL, username, and password
jenkins_url = "expert_solution.net.plm.eds.com/job/Amar/job/WaitingTest/buildWithParameters?token=simdevops&Machine_Name=iltlvinteg6"
username = "admin"
password = "G^H&j8k9"

# Call the Start_Job function with encoded credentials
Start_Job(username, password, jenkins_url)

我对代码的修改是:首先,我使用urllib.parse.quote对用户名和密码进行编码,并将safe参数设置为空字符串,以确保所有特殊字符都被正确编码。接下来,我用编码的凭证构造URL,os.system调用将此URL用于命令。
如果您有任何进一步的问题或疑问,请让我知道。

相关问题