Как установить и запустить API FusionBrain на PHP?

Я пытаюсь запустить API FusionBrain (Кандинский) на PHP с использованием cURL, но постоянно получаю ошибку. Сообщение об ошибке выглядит следующим образом: 

```
"status":415,"error":"Unsupported Media Type",
"message":"Content-Type 'application/json;boundary=------------------------74d56a3837774af9' is not supported.",
"path":"/key/api/v1/text2image/run"
```

Можете подсказать, с чем может быть связана эта проблема? Ниже приведён код из документации на Python:
  • 4 ноября 2024 г. 23:22
Ответы на вопрос 2
Ошибка, с которой вы столкнулись, указывает на проблему с заголовком `Content-Type` в вашем запросе. Сервер ожидает получить данные в виде JSON, но вы отправляете их с некорректным заголовком. Попробуем исправить это. 

Пример реализации API FusionBrain на PHP с использованием cURL может выглядеть следующим образом:

```php
<?php

// URL вашего API
$url = 'https://ваш_адрес/api/v1/text2image/run';

// Данные, которые вы хотите отправить
$data = [
    'text' => 'Ваш текст',
    'other_parameter' => 'значение'
];

// Инициализация cURL
$ch = curl_init($url);

// Настройки cURL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json', // Указываем правильный Content-Type
    'Authorization: Bearer ваш_токен' // Если требуется токен авторизации, укажите его здесь
]);

// Преобразуем массив данных в JSON формат
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));

// Выполняем запрос
$response = curl_exec($ch);

// Проверяем наличие ошибок
if (curl_errno($ch)) {
    echo 'Ошибка cURL: ' . curl_error($ch);
}

// Закрываем cURL сессию
curl_close($ch);

// Печатаем ответ
echo $response;

?>
```

### Объяснение кода
1. **URL**: Замените `ваш_адрес` на фактический адрес вашего API.
2. **Данные**: `data` — это массив с данными, которые вы хотите отправить. Убедитесь, что ключи и значения соответствуют ожиданиям API.
3. **cURL**:
   - `curl_setopt($ch, CURLOPT_HTTPHEADER, ...)` – устанавливаем `Content-Type` как `application/json`. Это важно, так как сервер ожидает JSON. 
   - Делаем `json_encode($data)` для преобразования массива PHP в JSON строку.
4. **Обработка ответа**: Если вызов API прошёл успешно, вы можете обработать ответ как нужно.

### Причины ошибки 415
- Неправильный заголовок `Content-Type`: на сервер отправляется `application/json;boundary=...`, что недопустимо для JSON. Убедитесь, что вы используете только `application/json`.
- Неверный формат отправляемых данных: убедитесь, что ваши данные корректно сериализуются в JSON.

Попробуйте этот код, и он должен сработать, если ваш API доступен по указанному адресу и настройки верны.
<?php

// ...

curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'X-Key: Key '.$xKey,
            'X-Secret: Secret '.$xSecret,
            'Content-Type: application/json'
        ]);

// ...

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));

// ...
Похожие вопросы