Код ваших запросов действительно не делает то же самое.Вы устанавливаете data=token_data
, который помещает токен в тело запроса.В командной строке curl
используется HTTP-заголовок , а тело остается пустым.
Сделайте то же самое в Python:
token_data = {'Private-Token': "somesecrettoken"}
requests.Request("DELETE", url, headers=token_data)
Вы также можете поставитьтокен в параметрах URL через аргумент params
:
token_data = {'private_token': "somesecrettoken"}
requests.Request("DELETE", url, params=token_data)
Это добавляет ?private_token=somesecrettoken
к URL-адресу, отправленному на gitlab.
Однако , GitLabпринимает значение private_token
в теле запроса , а также , либо в виде данных формы, либо в виде JSON.Это означает, что вы используете API запросов неправильно.
* requests.Request()
Экземпляр не будет отправлен без дополнительной работы.Обычно требуется только, если вы хотите получить доступ к подготовленным данным перед отправкой .
Если вам не нужно использовать эту более продвинутую функцию, используйте метод requests.delete()
:
response = requests.delete(url, headers=token_data)
Если вам нужно нужна функция, используйте requests.Session()
объект , затем сначала подготовьте объект запроса, затем отправьте его:
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.