Ответ GitLab API `400 Bad Request`: неверный запрос

#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, плюс затем работает хорошо