В каком формате должен быть создан запрос POST для доступа к API Imagga? - PullRequest
0 голосов
/ 04 ноября 2019

Я создаю мобильное приложение с использованием React-Native, которое рекомендует одежду пользователям. Я использую API Imagga , чтобы получить цвета одежды, исключая фон. Я попытался сделать POST-запрос, используя fetch, из анализа кода node.js, приведенного в документации :

image_file_b64 = "" + image_file_b64

//Extracting the colors from the object
  let response = await fetch('https://api.imagga.com/v2/colors', {  
    method: 'POST',
    headers: {
        'apiKey': '<PLACEHOLDER>',
        'apiSecret': '<PLACEHOLDER>',
        'Authorization': '<PLACEHOLDER>',
        Accept: 'application/json',
        'Content-Type': 'application/json',
    },
    body: JSON.stringify({
        image_base64: image_file_b64,
        extract_overall_colors: 0,
    })
})
let responseJson = await response.json()
console.log(responseJson)

Однако, единственный вывод, который я получил (вошел в последнюю строку):

Object {
  "status": Object {
    "text": "Please provide content for processing.",
    "type": "error",
  },
}

Я работал с кем-то из Imagga, чтобы решить эту проблему, но он не был знаком с реакцией на нативную. он предложил изменить тип содержимого на «application / x-www-form-urlencoded» или «application / x-www-form-urlencoded; charset = UTF-8», но ни один из них не сработал.

Я вполне уверен, что проблема в том, как я настроил свою выборку. Если кто-то знаком с API Imagga, не могли бы вы определить, что в коде неверно, или несоответствие в форматировании между тем, что ожидает Imagga, и тем, что я даю, что приводит к тому, что он не думает, что я предоставил ему информацию. Спасибо!

1 Ответ

0 голосов
/ 04 ноября 2019

тело выборки неверно, тип содержимого, который вы используете, - JSON, почему вы отправляете строку. измените его следующим образом и попробуйте.

let response = await fetch('https://api.imagga.com/v2/colors', {  
    method: 'POST',
    headers: {
        'apiKey': '<PLACEHOLDER>',
        'apiSecret': '<PLACEHOLDER>',
        'Authorization': '<PLACEHOLDER>',
        Accept: 'application/json',
        'Content-Type': 'application/json',
    },
    body: {
        image_base64: image_file_b64,
        extract_overall_colors: 0,
    })
})

Я прочитал официальный API, он приводит пример node.js. Вы можете в соответствии с этим и изменить. Если приведенный выше код не был успешным, вы можете изменить тип содержимого на formdata

let params = {
        image_base64: image_file_b64,
        extract_overall_colors: 0,
    };
let formData = new FromData()
formdata.append('RequestData',JSON.stringify(params))
let response = await fetch('https://api.imagga.com/v2/colors', {  
    method: 'POST',
    headers: {
        'apiKey': '<PLACEHOLDER>',
        'apiSecret': '<PLACEHOLDER>',
        'Authorization': '<PLACEHOLDER>',
         Accept: 'application/json',
        'Content-Type': 'multipart/form-data',
    },
    body: formData)
})

, это официальный api , и вы можете использовать программное обеспечение почтальона для проверки запроса

...