【问题标题】:Special character "!" and "@" in password and username respectively特殊字符 ”!”和“@”分别在密码和用户名中
【发布时间】:2018-10-18 20:43:14
【问题描述】:

我正在尝试在具有

的 Python 中发送 requests.post
username = "devoops123@mdf.nct.com"
password = "ChangemeinNv!"

我的脚本有

start_build_url = 'http://{0}/jenkins/job/{1}/job/{2}/buildWithParameters?token={3}&{4}'.format(
    jenkins_uri, folder_name, job_name, build_token, build_param)
r = requests.post(
    start_build_url, data={
        'username': 'auth_username','password': 'auth_pass'}
)

我在执行脚本时遇到401 Authentication 问题

在将密码作为参数传递给我的脚本时,我尝试了以下方法,但似乎没有任何帮助:

  • %21 代替 !%40 代替 @
  • 通过\转义两个特殊字符
  • 将参数括在" "

【问题讨论】:

  • 您是发送'auth_username' 作为帖子数据还是什么?
  • 通常您可以使用类似 base64 编码的方式对字符串进行编码,这样就不会发生这种情况。您与之交互的任何服务都支持吗?
  • 密码和用户名是自己编的
  • @PatrickHaugh 你是在对用户说 auth_pass.encode('utf-8') 吗?这个我已经完成了
  • @PatrickHaugh:这高度依赖于特定的 API。碰巧 HTTP Basic Auth 使用 base64,是的,但简单地猜测编码不会让你走得太远。

标签: python python-2.7 jenkins python-requests


【解决方案1】:

Jenkins 希望您使用 HTTP 的 Basic authentication 功能发送用户名和密码。 requests 可以handle this natively。见Jenkins Remove access API documentation

当您的 Jenkins 受到保护时,您可以使用 HTTP BASIC 身份验证来验证远程 API 请求。

只需将用户名和密码放入作为auth 参数传入的元组中:

start_build_url = 'http://{0}/jenkins/job/{1}/job/{2}/buildWithParameters?token={3}&{4}'.format(
    jenkins_uri, folder_name, job_name, build_token, build_param)
r = requests.post(
    start_build_url, auth=(username, password),
)

usernamepassword 值都不需要转义,让requests 为您担心。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-16
  • 2012-12-21
  • 2017-12-27
  • 1970-01-01
相关资源
最近更新 更多