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

  • Автор темы Автор темы clocky
  • Дата начала Дата начала

clocky

Client
Регистрация
26.09.2019
Сообщения
397
Реакции
72
Баллы
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
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. Код написал, но сам еще не встроил в свой проект, поэтому особо не тестил, тонкостей работы с сервисом не знаю.
 
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). Что не так сделал?( вот шаблон прилагаю.
 

Вложения

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

string apiKey = "ключ";


string secretKey = "секрет";
 
  • Спасибо
Реакции: AndreyAAA
Укажите свои ключи от сервиса и секрет

string apiKey = "ключ";


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

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

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

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