Помогите разобраться с Post запросом и API

clocky

Client
Регистрация
26.09.2019
Сообщения
363
Благодарностей
48
Баллы
28
Собственно пытаюсь победить сервис https://fusionbrain.ai/docs/doc/api-dokumentaciya/ , вроде разобрался как ставить заголовки для авторизации, но при любой попытке генерации получаю 415 ошибку, как я понимаю, это может быть что угодно. Но вообще ругается вот так:
ошибка:
<html><body><h1>Whitelabel Error Page</h1><p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p><div id='created'>Wed Apr 10 16:06:08 GMT 2024</div><div>There was an unexpected error (type=Unsupported Media Type, status=415).</div><div>Content-Type &#39;application/json&#39; is not supported.</div></body></html>
Прикрепил шаб с рабочими ключами, может кто поможет.
Спасибо всем за помощь!
 

Вложения

  • Спасибо
Реакции: Pierre Paul Jacques

deskuznetsov

Client
Регистрация
29.08.2019
Сообщения
528
Благодарностей
363
Баллы
63
C#:
string baseUrl = "https://api-key.fusionbrain.ai/";
string apiKey = "ключ";
string secretKey = "секрет";

using (var client = new HttpClient { BaseAddress = new Uri(baseUrl) })
{
    // Установка заголовков запроса
    client.DefaultRequestHeaders.Add("X-Key", $"Key {apiKey}");
    client.DefaultRequestHeaders.Add("X-Secret", $"Secret {secretKey}");

    // Получение списка моделей
    var modelResponse = client.GetAsync("key/api/v1/models").Result;
    modelResponse.EnsureSuccessStatusCode();
    var modelData = JsonConvert.DeserializeObject<List<dynamic>>(modelResponse.Content.ReadAsStringAsync().Result);
    string modelId = modelData[0]["id"];

    // Вывод ID модели в лог
    project.SendInfoToLog("Получен ID модели: " + modelId);

    var parameters = new
    {
        type = "GENERATE",
        style = "Detailed photo",
        numImages = 1,
        negativePromptUnclip = "яркие цвета, кислотность, высокая контрастность",
        width = 512,
        height = 512,
        generateParams = new { query = project.Variables["query"].Value }
    };

    var generateUrl = "key/api/v1/text2image/run";
    var formData = new MultipartFormDataContent();
    formData.Add(new StringContent(modelId), "model_id");
    formData.Add(new StringContent(JsonConvert.SerializeObject(parameters), Encoding.UTF8, "application/json"), "params");

    // Запуск генерации изображения
    var generateResponse = client.PostAsync(generateUrl, formData).Result;
    generateResponse.EnsureSuccessStatusCode();
    var generateData = JsonConvert.DeserializeObject<dynamic>(generateResponse.Content.ReadAsStringAsync().Result);
    string requestId = generateData.uuid;

    // Вывод UUID операции генерации в лог
    project.SendInfoToLog("Генерация изображения начата, UUID: " + requestId, true);

    int attempts = 10;
    int delay = 10;

    // Проверка статуса операции генерации
    while (attempts > 0)
    {
        var checkResponse = client.GetAsync($"key/api/v1/text2image/status/{requestId}").Result;
        checkResponse.EnsureSuccessStatusCode();
        var checkData = JsonConvert.DeserializeObject<dynamic>(checkResponse.Content.ReadAsStringAsync().Result);

        if (checkData.status == "DONE")
        {
            // Обработка успешной генерации
            project.SendInfoToLog("Генерация изображения завершена, обработка изображения...", true);

            try
            {
                var imageBase64 = checkData.images[0].ToString();
                project.Variables["image"].Value = imageBase64;
                // Вывод в лог о том, что данные изображения сохранены
                project.SendInfoToLog("Данные изображения сохранены в переменной 'image'.", true);
            }
            catch (Exception ex)
            {
                project.SendInfoToLog("Ошибка обработки изображения: " + ex.Message, true);
            }

            break;
        }
        else if (checkData.status == "FAILED")
        {
            project.SendInfoToLog("Генерация изображения не удалась.", true);
            break;
        }

        attempts--;
        Thread.Sleep(delay * 1000);
    }
}
Создайте 2 переменные image и query (тут промт для картинки)
Стиль в коде если надо смените.

using надо подключить

C#:
using Newtonsoft.Json;

using System;

using System.Collections.Generic;

using System.Net.Http;

using System.Text;

using System.Threading;

может какие то лишние, долго писал под этот сервис и могли какие-то старые остаться юзинги.


Ссылки из GAC на скрине
120244



P.S. Код написал, но сам еще не встроил в свой проект, поэтому особо не тестил, тонкостей работы с сервисом не знаю.
 

AndreyAAA

Client
Регистрация
07.05.2016
Сообщения
1 250
Благодарностей
78
Баллы
48
C#:
string baseUrl = "https://api-key.fusionbrain.ai/";
string apiKey = "ключ";
string secretKey = "секрет";

using (var client = new HttpClient { BaseAddress = new Uri(baseUrl) })
{
    // Установка заголовков запроса
    client.DefaultRequestHeaders.Add("X-Key", $"Key {apiKey}");
    client.DefaultRequestHeaders.Add("X-Secret", $"Secret {secretKey}");

    // Получение списка моделей
    var modelResponse = client.GetAsync("key/api/v1/models").Result;
    modelResponse.EnsureSuccessStatusCode();
    var modelData = JsonConvert.DeserializeObject<List<dynamic>>(modelResponse.Content.ReadAsStringAsync().Result);
    string modelId = modelData[0]["id"];

    // Вывод ID модели в лог
    project.SendInfoToLog("Получен ID модели: " + modelId);

    var parameters = new
    {
        type = "GENERATE",
        style = "Detailed photo",
        numImages = 1,
        negativePromptUnclip = "яркие цвета, кислотность, высокая контрастность",
        width = 512,
        height = 512,
        generateParams = new { query = project.Variables["query"].Value }
    };

    var generateUrl = "key/api/v1/text2image/run";
    var formData = new MultipartFormDataContent();
    formData.Add(new StringContent(modelId), "model_id");
    formData.Add(new StringContent(JsonConvert.SerializeObject(parameters), Encoding.UTF8, "application/json"), "params");

    // Запуск генерации изображения
    var generateResponse = client.PostAsync(generateUrl, formData).Result;
    generateResponse.EnsureSuccessStatusCode();
    var generateData = JsonConvert.DeserializeObject<dynamic>(generateResponse.Content.ReadAsStringAsync().Result);
    string requestId = generateData.uuid;

    // Вывод UUID операции генерации в лог
    project.SendInfoToLog("Генерация изображения начата, UUID: " + requestId, true);

    int attempts = 10;
    int delay = 10;

    // Проверка статуса операции генерации
    while (attempts > 0)
    {
        var checkResponse = client.GetAsync($"key/api/v1/text2image/status/{requestId}").Result;
        checkResponse.EnsureSuccessStatusCode();
        var checkData = JsonConvert.DeserializeObject<dynamic>(checkResponse.Content.ReadAsStringAsync().Result);

        if (checkData.status == "DONE")
        {
            // Обработка успешной генерации
            project.SendInfoToLog("Генерация изображения завершена, обработка изображения...", true);

            try
            {
                var imageBase64 = checkData.images[0].ToString();
                project.Variables["image"].Value = imageBase64;
                // Вывод в лог о том, что данные изображения сохранены
                project.SendInfoToLog("Данные изображения сохранены в переменной 'image'.", true);
            }
            catch (Exception ex)
            {
                project.SendInfoToLog("Ошибка обработки изображения: " + ex.Message, true);
            }

            break;
        }
        else if (checkData.status == "FAILED")
        {
            project.SendInfoToLog("Генерация изображения не удалась.", true);
            break;
        }

        attempts--;
        Thread.Sleep(delay * 1000);
    }
}
Создайте 2 переменные image и query (тут промт для картинки)
Стиль в коде если надо смените.

using надо подключить

C#:
using Newtonsoft.Json;

using System;

using System.Collections.Generic;

using System.Net.Http;

using System.Text;

using System.Threading;

может какие то лишние, долго писал под этот сервис и могли какие-то старые остаться юзинги.


Ссылки из GAC на скрине
Посмотреть вложение 120244


P.S. Код написал, но сам еще не встроил в свой проект, поэтому особо не тестил, тонкостей работы с сервисом не знаю.
Сделал все вроде как написанно, скачал так же библиотеку которой не было https://www.nuget.org/packages/Newtonsoft.Json . и выдало ошибку Выполнение действия CSharp OwnCode. Response status code does not indicate success: 401 (Unauthorized). Что не так сделал?( вот шаблон прилагаю.
 

Вложения

deskuznetsov

Client
Регистрация
29.08.2019
Сообщения
528
Благодарностей
363
Баллы
63
Сделал все вроде как написанно, скачал так же библиотеку которой не было https://www.nuget.org/packages/Newtonsoft.Json . и выдало ошибку Выполнение действия CSharp OwnCode. Response status code does not indicate success: 401 (Unauthorized). Что не так сделал?( вот шаблон прилагаю.
Укажите свои ключи от сервиса и секрет

string apiKey = "ключ";


string secretKey = "секрет";
 
  • Спасибо
Реакции: AndreyAAA

AndreyAAA

Client
Регистрация
07.05.2016
Сообщения
1 250
Благодарностей
78
Баллы
48
Укажите свои ключи от сервиса и секрет

string apiKey = "ключ";


string secretKey = "секрет";
Заработало), когда сделал так:string baseUrl = "https://api-key.fusionbrain.ai/";
string apiKey = "C560168F8A03BB1A10263B0C7C1E7E4E";
string secretKey = "4B511F52DB905260276997B1A9A50C34";
А как сделать если там у меня переменые?
Встабил как переменные , то не работало.
У меня разные же ключи и многопоток.
И еще вопрос, ответ пришел в переменную image наверно в формате 64, (набор символов,забыл как называется ), как теперь пересохранить это все в картинку?
 

deskuznetsov

Client
Регистрация
29.08.2019
Сообщения
528
Благодарностей
363
Баллы
63
Заработало), когда сделал так:string baseUrl = "https://api-key.fusionbrain.ai/";
string apiKey = "C560168F8A03BB1A10263B0C7C1E7E4E";
string secretKey = "4B511F52DB905260276997B1A9A50C34";
А как сделать если там у меня переменые?
Встабил как переменные , то не работало.
У меня разные же ключи и многопоток.
И еще вопрос, ответ пришел в переменную image наверно в формате 64, (набор символов,забыл как называется ), как теперь пересохранить это все в картинку?
Ну вообще убрать переменные и сделать как у меня, сразу указать в коде. Они же не меняются, зачем их с переменных дергать.
Но если нужно, то удалить вместе с кавычками и нажать правой кнопкой мыши и выбрать вставить значение переменной и выбрать нужные переменные.
Это уже все базовые вещи в которых желательно разбираться.

По поводу base64
Поищите на форуме, как из base64 сохранить картинку файлом. и просто отдельным кубиком добавьте.
например КЛИК
 
  • Спасибо
Реакции: AndreyAAA

AndreyAAA

Client
Регистрация
07.05.2016
Сообщения
1 250
Благодарностей
78
Баллы
48
Ну вообще убрать переменные и сделать как у меня, сразу указать в коде. Они же не меняются, зачем их с переменных дергать.
Но если нужно, то удалить вместе с кавычками и нажать правой кнопкой мыши и выбрать вставить значение переменной и выбрать нужные переменные.
Это уже все базовые вещи в которых желательно разбираться.

По поводу base64
Поищите на форуме, как из base64 сохранить картинку файлом. и просто отдельным кубиком добавьте.
например КЛИК
Получилось все!!! Спасибо большое!!!
А Вот за это "то удалить вместе с кавычками и нажать правой кнопкой мыши и выбрать вставить значение переменной" отдельное огромное спасибо!!! Я уже несколько лет пытаюсь узнать как вставить в c# переменную, а тут правой кнопки мыши))))
 

AndreyAAA

Client
Регистрация
07.05.2016
Сообщения
1 250
Благодарностей
78
Баллы
48
А может кто еще подсказать, как сделать что бы этот запрос весь, проходил через прокси?
А то что то перестало делать все, вроде выполняется кубук, но ответ в переменной с фото пустой(
 

deskuznetsov

Client
Регистрация
29.08.2019
Сообщения
528
Благодарностей
363
Баллы
63
А может кто еще подсказать, как сделать что бы этот запрос весь, проходил через прокси?
А то что то перестало делать все, вроде выполняется кубук, но ответ в переменной с фото пустой(
какой смысл им ограничение по IP вешать, если используется API ключ - по которому можно удобно и точно ограничить тех кто им не нравится.
пробовали просто поменять апи ключи/секрект?
 

AndreyAAA

Client
Регистрация
07.05.2016
Сообщения
1 250
Благодарностей
78
Баллы
48
какой смысл им ограничение по IP вешать, если используется API ключ - по которому можно удобно и точно ограничить тех кто им не нравится.
пробовали просто поменять апи ключи/секрект?
Конечно поменял, их уменя много и постоянно меняются. Хотя есть вариант, что баланс закончился, если он там есть, ну или все таки ип.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)