#php #gitlab-api
#php #gitlab-api
Вопрос:
Я работаю над GitLab API для фиксации mp3-файла, и он работал годами без проблем, а последние несколько недель выдает ошибки
GuzzleHttpExceptionClientException: Client error: `POST https://gitlab.com/api/v4/projects/.../repository/commits/` resulted in a `400 Bad Request` response in file vendor/guzzlehttp/guzzle/src/Exception/RequestException.php on line 113
Вот код, который я использую,
$client = new Client([
// Base URI is used with relative requests
'base_uri' => 'https://gitlab.com/',
// You can set any number of default request options.
'timeout' => 300,
]);
$files = [
[
'name' => 'branch',
'contents' => 'TEST'
],
[
'name' => 'commit_message',
'contents' => 'Some message'
],
[
'name' => 'actions[][action]',
'contents' => 'update'
],
[
'name' => 'actions[][file_path]',
'contents' => 'gitlab filepath/test.mp3'
],
[
'name' => 'actions[][content]',
'contents' => file_get_contents('localfilepath/test.mp3')
],
];
$response = $client->request('POST', '/api/v4/projects/.../repository/commits/', [
'headers' => [
'PRIVATE-TOKEN' => $TOKEN
],
'multipart' => $files
]);
return $response->getBody()->getContents();
```
Thanks in Advance
Комментарии:
1. Они изменили свой API?
2. Для меня это звучит как проблема на сервере.
3. Я не уверен, что gitlab изменил свой API. но я предполагаю, что я использовал какую-то более старую версию GuzzleHttp и каким-то образом она обновилась, хотя я не помню, чтобы я обновлял composer @miken32 Можете ли вы прояснить возможную проблему с сервером, о которой вы упомянули?
4. Единственные изменения, о которых я знаю, — это изменение общедоступного IP-адреса моего офисного Интернета. все наши серверы находятся в облаке Google. и я добавил общедоступный IP-адрес в правила брандмауэра. видите ли вы какую-либо зависимость от этого?
5. Если вы не изменили код, а сервер отвечает ошибкой, разумно предположить, что на сервере что-то изменилось. Либо это временная проблема, либо вам нужно будет скорректировать свой код, чтобы компенсировать.
Ответ №1:
создать-новый-файл-в-репозитории
POST /projects/:id/repository/files/:file_path
curl --request POST --header 'PRIVATE-TOKEN: <your_access_token>'
--header "Content-Type: application/json"
--data '{"branch": "master", "author_email": "author@example.com", "author_name": "Firstname Lastname",
"content": "some content", "commit_message": "create a new file"}'
"https://gitlab.example.com/api/v4/projects/13083/repository/files/app/project.rb"
Parameters:
file_path (required) - URL encoded full path to new file. Ex. lib%2Fclass%2Erb
branch (required) - Name of the branch
start_branch (optional) - Name of the branch to start the new commit from
encoding (optional) - Change encoding to base64. Default is text.
author_email (optional) - Specify the commit author’s email address
author_name (optional) - Specify the commit author’s name
content (required) - File content
commit_message (required) - Commit message
Хотя в документе показано, что параметры «author_email» и «author_name» являются необязательными, но без этих двух параметров будет сообщаться об ошибке 400, плюс затем работает хорошо