【问题标题】:How to convert cURL in Python requests to change Jenkins config.xml file如何在 Python 请求中转换 cURL 以更改 Jenkins config.xml 文件
【发布时间】:2015-10-26 18:04:57
【问题描述】:

我有这个 cURL:

curl -X POST http://user:pass@blabla.com:8080/job/myproject/config.xml --data-binary "@new_config.xml"

我基本上是在尝试通过更改预先存在的 config.xml 文件来为 Jenkins 安装设置新配置。 我正在尝试将其转换为类似的东西,以便在我的代码中更灵活地使用它:

url     = "http://host:8080/job/myproject/config.xml"
auth    = ('user','pass')
payload = {"--data-binary": "@new_config.xml"}
headers = {"Content-Type" : "application/xml"}
r = requests.post(url, auth=auth, data=payload, headers=headers)

我知道我使用了错误的有效负载和标头。我应该如何更改它们? 我运行它并获取 500 响应代码。

我阅读了 this post ,但我很难在我的案例中应用它。

【问题讨论】:

    标签: python curl jenkins python-requests


    【解决方案1】:

    --data-binary 开关意味着:将命令行参数作为整个 POST 正文发布,而不包含在 multipart/form-dataapplication/x-www-form-encoding 容器中。 @ 告诉 curl 从文件名加载数据; new_config.xml 在这种情况下。

    您需要打开文件对象以将内容作为data 参数发送:

    url     = "http://host:8080/job/myproject/config.xml"
    auth    = ('user','pass')
    headers = {"Content-Type" : "application/xml"}
    with open('new_config.xml', 'rb') as payload:
        r = requests.post(url, auth=auth, data=payload, headers=headers)
    

    注意,我将文件对象直接传入requests;然后将读取数据并将其推送到 HTTP 套接字,从而有效地流式传输数据。

    【讨论】:

    • 感谢 Martijn,它做得很好!如果我可以问你,你能否指点我一些链接以更好地理解 cURL ?我继承了很多使用它的脚本,我最想转换到更优雅的东西,比如请求。
    • 我只是使用man curl 帮助页面来了解命令行的作用。不过,这里需要了解curlrequests 都需要一定的基本HTTP 知识。
    • 那我就从那里开始吧。我最好!
    猜你喜欢
    • 2023-04-08
    • 2019-06-28
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2023-04-02
    • 2013-12-26
    • 2016-01-30
    相关资源
    最近更新 更多