request.quest删除gitlab分支不起作用,但使用curl DELETE工作

问题描述 投票:0回答:1

我试图从gitlab删除一个git分支,使用gitlab APIpersonal access token

如果我像这样使用curl:

curl --request DELETE --header "PRIVATE_TOKEN: somesecrettoken" "deleteurl"

然后它工作,分支被删除。

但如果我像这样使用requests

token_data = {'private_token': "somesecrettoken"}
requests.Request("DELETE", url, data= token_data)

它不起作用;分支未删除。

python curl python-requests
1个回答
0
投票

您的请求代码确实没有做同样的事情。您正在设置data=token_data,它将令牌放入请求正文中。 curl命令行使用HTTP标头代替,并将主体留空。

在Python中做同样的事情:

token_data = {'Private-Token': "somesecrettoken"}
requests.Request("DELETE", url, headers=token_data)

您还可以通过params参数将令牌放入URL参数中:

token_data = {'private_token': "somesecrettoken"}
requests.Request("DELETE", url, params=token_data)

这会将?private_token=somesecrettoken添加到发送到gitlab的URL中。

但是,GitLab也接受请求体中的private_token值,无论是作为表单数据还是作为JSON。这意味着您使用的请求API错误。

没有额外的工作就不会发送requests.Request()实例。它通常是only needed if you want to access the prepared data before sending

如果您不需要使用此更高级的功能,请使用requests.delete()方法:

response = requests.delete(url, headers=token_data)

如果确实需要该功能,请使用requests.Session() object,然后首先准备请求对象,然后发送:

with requests.Session() as session:
    request = requests.Request("DELETE", url, params=token_data)
    prepped = request.prepare()
    response = session.send(prepped)

即使不需要使用准备好的请求,在使用API​​时,会话也非常有用。您可以在会话上设置一次令牌:

with requests.Session() as session:
    session.headers['Private-Token'] = 'somesecrettoken'

    # now all requests via the session will use this header
    response = session.get(url1)
    response = session.post(url2, json=....)
    response = session.delete(url3)
    # etc.
© www.soinside.com 2019 - 2024. All rights reserved.