【问题标题】:In what format should a fetch POST request be created to access the Imagga API?应该以什么格式创建获取 POST 请求以访问 Imagga API?
【发布时间】:2020-02-29 12:41:58
【问题描述】:

我正在使用 React-Native 构建一个向用户推荐服装的移动应用程序。我正在使用Imagga's API 来获取衣服的颜色,同时排除背景。我试图通过分析documentation中给出的node.js代码来使用fetch来发出POST请求:

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 的某个人合作解决此问题,但他不熟悉 React Native。他建议将内容类型更改为“application/x-www-form-urlencoded”或“application/x-www-form-urlencoded;charset=UTF-8”,但都没有奏效。

我相当有信心问题出在我设置提取的方式上。如果有人熟悉 Imagga API,您能否确定代码中的错误或 Imagga 期望的内容与我给它的内容之间的格式不匹配导致它不认为我已经给它输入了。谢谢!

【问题讨论】:

  • 你是在 react-native 还是 node.js 中使用这个 api?
  • @SuleymanSah 我在 react-native 中使用 API

标签: node.js rest react-native fetch-api


【解决方案1】:

获取正文不正确,您使用的 Content-Type 是 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 示例。您可以根据它进行修改。如果上面的代码不成功,可以将content-type改为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,可以使用postman软件测试请求

【讨论】:

  • 我使用了 Postman 并成功发出请求。但是,我无法成功将其转移到获取。这是我的代码的样子 - 我在尝试共享集合时使用了建议的格式。我仍然得到相同的输出。有什么问题?
  • @NoahGonzales,嗨,我没有看到代码链接,请重新编辑,
  • 以下是我收藏的链接:getpostman.com/collections/fd9577c6602f730f945b,这是我的代码的链接:wetransfer.com/downloads/…
  • @NoahGonzales,content-type是form-urlencoded不支持fetch,需要自己转换,可以看这个问题的答案(stackoverflow.com/questions/35325370/…)。
  • @NoahGonzales,我的回答是内容类型是FormData,如果能成功获取数据,建议你使用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-10
  • 1970-01-01
相关资源
最近更新 更多