【问题标题】:axios POST get 400axios POST 获得 400
【发布时间】:2022-10-23 19:13:02
【问题描述】:

这真让我抓狂! 根据下面的屏幕截图,完全相同的 POST 请求在 Insomina 中运行良好:

Insomina 唯一的标题是:Content-Type: application/json

现在,代码中的相同请求(我什至复制了 Insomnia 为 axios 生成的代码) 通过 Typescript 中的 axios:

  const saveReqConfig: AxiosRequestConfig = {
          method: 'POST',
          url: 'THE SAME URL USED IN Insomina',
          timeout: 3000,
          data: {
            name: `TestName`,
            uri: `TestURI`,
            statusCode: '200',
            simulatedLatency: '0',
            contentType: "application/json",
            tags: '',
            response: 'testing...',
            type: 'VA',
          },
          headers: {
            'Content-Type': 'application/json',
          }
        }
        const normalAxios = axios.create();
        const test = await normalAxios.request(saveReqConfig);

不明白为什么我从代码中得到AxiosError: Request failed with status code 400,但同样的请求在 Insomina 中运行良好。

【问题讨论】:

  • The only header Insomina has is: Content-Type: application/json. 这就是你的答案。添加该标题。
  • 如果您不将配置传递给.create()。然后将 url 和 body 传递给您创建的实例?您是否需要使用.create() 而不仅仅是axios.post?需要工厂吗?
  • @DeepakKamat 添加了标题,但仍然是同样的错误。问题也已编辑。
  • @TumoMasire。尝试axios.post() 并得到同样的错误。所以试图以冗长的风格发帖。
  • 好吧,我举了一个更完整的例子。它可能对您没有帮助,但可能会帮助其他人。

标签: axios


【解决方案1】:

我认为您没有正确设置标题,或者您可能没有正确设置 .create() 。

像这样的东西:

const instance = axios.create({
  url: '/post',
  baseURL: 'https://httpbin.org',
  method: 'POST',
  timeout: 1000, 
  headers: {
  Content-Type: 'application/json' // <- set your headers
 }
});

let res = await instance.request({ // <- pass the data here
  data: { // This should be whatever you want to post to this url. I just copied what you had.
            name: `TestName`,
            uri: `TestURI`,
            statusCode: '200',
            simulatedLatency: '0',
            tags: '',
            response: 'testing...',
            type: 'VA',
          }
});

您确定需要使用 .create() 工厂吗?像这样的普通帖子可能更适合您的需求?

const data= { title: 'Axios POST Request Example' };
const headers = { 
    Content-Type: 'application/json'
};

axios.post('url', data, { headers }).then(response => console.log(response.data.title);

【讨论】:

  • 感谢您的努力,但我们通过 axios 以 axiosInstance.request(reqConfig) 的形式发送所有 http 请求,其中 reqConfig 包含请求的所有详细信息,包括发布请求的数据和标头。
  • 著名的。您是否看到有baseURL 的部分,然后是url 在您的域或基本网址之后的部分?
  • baseURL 就是它所需要的。
  • 好吧,我希望您可以尝试baseURLurl。您可以从 API 访问日志吗?如果你说的是对的,那么这确实是一个非常奇怪的错误。你能发布错误响应的正文吗?
  • 是的,我尝试了url 并得到了同样的错误。
【解决方案2】:

在这里发帖以防它对某人有帮助。 事实证明,我无法以编程方式发布请求是因为缺少 TLS 证书。我不知道 Insomnia 可以选择禁用 TLS,这就是它在 Insomnia 中起作用的原因。 要使用 axios 从节点禁用 TLS(不要在生产中执行此操作!),请创建 axios 的实例,并将 https 代理设置 deniedUnauthorized 设置为 false,例如

const instance = axios.create({
   httpsAgent: new https.Agent({
      rejectedUnauthorized: false
   })
});


Also, set the environment variable as:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-22
    • 2020-04-17
    • 2019-09-12
    • 2021-01-13
    • 1970-01-01
    • 2020-06-26
    • 2022-01-08
    • 2020-03-23
    相关资源
    最近更新 更多