如何使用 PUT 或 POST 请求将某些内容设置为列表而不是字符串到 Gitlab API?

问题描述

我只是想设置 GitLab 合并请求的标签

当我向 GitLab 发出这个 PUT 请求时

requests.put( https://gitlab.com/api/v4/projects/{}/merge_requests/{}".format(project_id,mr_num),{"labels":mr_new_labels},headers={'PRIVATE-TOKEN': os.getenv("GITLAB_ACCESS_TOKEN","")} ),

如果 mr_new_labels 是任何字符串或具有 1 个元素的列表,它将起作用 - 所以如果请求只是设置 1 个标签(或 0 个标签,带有空字符串)。

但是,如果mr_new_labels是一个有多个元素的列表,那么只有最后一个元素会被'put'(可能列表中的元素是轮流'put'并相互替换,而不是列表一次被放入) ,因此合并请求将只有 1 个标签

我曾尝试使用 POST 请求来执行此操作,但对我而言,POST 请求的语法与 PUT 请求相同,带有任何字符串或列表值 mr_new_labels,即 requests.post( https://gitlab.com/api/v4/projects/{}/merge_requests/{}".format(project_id,"")} ),不会抛出错误但根本不起作用,即使我看过的任何地方都没有看到 PUT 请求和 POST 请求的语法之间有任何区别。所以我认为这可能与 GitLab API 不接受 POST 请求有关。 (POST 请求是否应该与 PUT 请求不同?)

所以,我不知道如何使用 PUT 或 POST 请求将“标签”设置为具有多个值的列表(我知道它可以)。任何想法将不胜感激:)

干杯, 米兰

解决方法

您不能 PUT(或 POST)列表值(因为 HTTP 查询只是一个字符串)。但是,{"labels":",".join(mr_new_labels)} 会起作用 :)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...