415 Unsupported Media Type Fetch POST 请求

Posted

技术标签:

【中文标题】415 Unsupported Media Type Fetch POST 请求【英文标题】:415 Unsupported Media Type Fetch POST request 【发布时间】:2021-07-16 17:17:49 【问题描述】:

我正在尝试向一些 3rd 方 API 发送 fetch POST 请求。在 Postman 中测试此调用时,我能够获得成功的 200 响应。在我的项目中使用来自 Postman 的相同代码会返回 415 Unsupported Media Type。我一直在寻找解决方案,并尝试按照几篇文章和文章的建议将其与以下标题一起发送。

myHeaders.append("Content-Type", "application/json");
myHeaders.append("Access-Control-Allow-Origin", "*");
myHeaders.append("Accept", "application/json");

我已将我的 API 调用附在下面,如果有人能够发现我收到此 415 的原因,那将非常有帮助。

var myHeaders = new Headers();
myHeaders.append("xxxxx_api_key", "");
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Access-Control-Allow-Origin", "*");
myHeaders.append("Accept", "application/json");

var raw = JSON.stringify(
    api_key: "xxxxx_api_key",
    profiles: [
      email: "thomas.jefferson@example.com",
      phone_number: "17326138213",
      example_property: "valueB",
    ],
  );
console.log(raw);
var requestOptions = 
  method: "POST",
  mode: "no-cors",
  headers: myHeaders,
  body: raw,
  redirect: "follow",
;

fetch("https://a.klaviyo.com/api/v2/list/XXXXX/members", requestOptions)
  .then((response) => response.json())
  .then((result) => console.log(result))
  .catch((error) => console.log("error", error));

这是从 Postman 导出的工作请求

curl --location --request POST 'a.klaviyo.com/api/v2/list/XXXXX/members' \ 
   --header 'Content-Type: application/json' \ 
   --header 'xxx_api_key;' \ 
   --data-raw ' "api_key": "xxx_api_key", "profiles": [  "email": "thomas.jefferson@example.com", "phone_number": "17326138213", "example_property": "valueB"  ] '

【问题讨论】:

当你导出它时,请展示工作邮递员请求的样子(例如作为 cURL) curl --location --request POST 'a.klaviyo.com/api/v2/list/X3jKqa/members' \ --header 'Content-Type: application/json' \ --header 'xxx_api_key;' \ --data-raw ' "api_key": 'xxx_api_key', "profiles": [ "email": "thomas.jefferson@example.com", "phone_number": "17326138213", "example_property": "valueB " ] ' 上面的调用是从 Postman 提取的一个 fetch API 调用。 我看到这两个请求之间的唯一区别是Accept 标头。从我从文档中得到的信息来看,xxx_api_key 标头实际上应该看起来像 api_key: xxx_api_key 但这似乎不是问题,因为 api 密钥也可以放在正文中。 【参考方案1】:

嘿,你可以使用中间件:

把你的网址改成

https://cors-anywhere.herokuapp.com/YOUR-URL-HERE

来源:https://github.com/Rob--W/cors-anywhere

【讨论】:

以上是关于415 Unsupported Media Type Fetch POST 请求的主要内容,如果未能解决你的问题,请参考以下文章

Spring 发送 JSON 数据提示 Unsupported Media Type 错误 “status“: 415, “error“: “Unsupported Media Type

Spring 发送 JSON 数据提示 Unsupported Media Type 错误 “status“: 415, “error“: “Unsupported Media Type

Ajax请求(415 Unsupported Media Type)

415 Unsupported Media Type Fetch POST 请求

Unsupported Media Type 415问题解决办法(Ajax)

反应:获取 API 使用 POST 获取 415 Unsupported Media Type