【问题标题】:Content-Type incorrect using Python Requests使用 Python 请求的 Content-Type 不正确
【发布时间】:2017-06-10 02:09:42
【问题描述】:

我正在尝试使用 Python Requests 库(2.17.3 和 Python 3.6)启动参数化 Jenkins 作业,但我遇到了问题。

我已经使用 Curl 进行了测试,它可以正常工作并像我预期的那样启动 Jenkins 工作。以下是我使用的 curl 命令的简化版本。

curl -X POST -H "$crumb" $jenkins_url/job/$job_name/build?token=$job_token \
  --user $auth \
  --data-urlencode json='
  {"parameter":
    [
      {"name":"parameter1", "value":"test1"},
      {"name":"parameter2", "value":"test2"},
      {"name":"git_repo", "value":"'$my_repo'"},
      {"name":"git_tag", "value":"'$git_tag'"}
    ]
  }'

虽然用 Python 做同样的事情会导致问题。这是(基本上)我在 Python 中所做的事情。

import requests
job_url = JENKINS_URL + "/job/" + JOB_NAME + "/build?token=" + JOB_TOKEN
params = {
    "parameter":
    [
  {"name":"parameter1", "value":"test1"},
  {"name":"parameter2", "value":"test2"},
  {"name":"git_repo", "value":"'$my_repo'"},
  {"name":"git_tag", "value":"'$git_tag'"}
    ]
}
job = requests.post(job_url, headers=headers, auth=(JENKINS_USER, JENKINS_PASS), data=params)

当我检查响应时,我在返回的 job.content 中得到了 Error 400 This page expects a form submission。查看作业对象中的内容类型,我发现它设置为text/html,这似乎不正确,但我不知道为什么它不尊重应该设置的标题。

print(job.headers)
{'Server': 'nginx/1.10.0 (Ubuntu)', 'Date': 'Sat, 10 Jun 2017 01:57:04 GMT', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '392', 'Connection': 'keep-alive', 'X-Content-Type-Options': 'nosniff', 'Set-Cookie': 'JSESSIONIDXXX;Path=/;Secure;HttpOnly', 'Cache-Control': 'must-revalidate,no-cache,no-store'}

我已尝试在代码中手动设置 Content-Type 标头,但似乎没有什么不同。

headers['Content-Type'] = 'application/x-www-form-urlencoded'

我做错了什么或遗漏了什么?

【问题讨论】:

  • 我认为您正在打印响应标头,而不是请求标头,所以我认为这无关紧要。你可以看看stackoverflow.com/a/35913411/6090676。它使用的是 buildWithParameters,我知道你说这不是必需的,因为你的 curl 没有它就可以工作,但你可能会让它以这种方式工作(使用查询参数)。
  • @burnettk 看起来它可以与buildWithParamaters 一起使用,我可能会使用它。
  • 超级,添加答案。

标签: python curl jenkins http-headers python-requests


【解决方案1】:

使用/buildWithParameters 而不是/build 就像在这个答案中:https://stackoverflow.com/a/35913411/6090676。您可以在 url 中指定参数作为查询参数。你会喜欢的。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2011-03-26
    • 2017-09-26
    • 1970-01-01
    • 2010-12-17
    相关资源
    最近更新 更多