You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

客户端经服务器调用第三方API无法获取X-Auth-Token问题排查

问题描述

尝试通过客户端请求自身Express服务器,再由服务器转发POST请求到第三方API(https://api.remarkets.primary.com.ar/auth/getToken),需在请求头携带用户名和密码,第三方API会在响应头返回X-Auth-Token。但目前通过服务器转发时无法获取该Token,直接用Postman调用第三方API则能正常拿到。

相关代码如下:

服务器代码

app.post("/signin", async (req, res) => {
  console.log("BODY", await req.body);
  try {
    const xToken = await axios.post(loginUrl, {
      headers: {
        "Content-Type": "application/x-www-form-urlencoded",
        "X-Username": req.body.username,
        "X-Password": req.body.password,
      },
    });
    console.log(xToken.headers);

    //res.send(xToken);
  } catch (error) {
    console.log("SERVER Error: ", error.message);
  }
});

客户端代码

const signin = async () => {
  try {
    const TOKEN = await axios.post("http://localhost:3000/signin", {
      username: "AGU",
      password: "MIOTTI",
    });

    console.log("TOKEN", TOKEN);
    return TOKEN;
  } catch (error) {
    console.log("CLIENT Error: ", error.message);
  }
};

signin();
问题原因与修复

问题核心是Axios调用参数顺序错误:

Axios POST请求的正确语法为:

axios.post(url[, data[, config]])

第三个参数才是包含headers的配置对象,但你将headers配置放在了第二个参数位置,相当于把headers当成请求体(data)发送给第三方API,真正的请求头里根本没有带上X-Username和X-Password。第三方API因未收到身份验证信息,所以未返回X-Auth-Token。

另外,服务器代码注释了res.send(xToken),即便拿到Token,客户端也无法接收响应,这也是需要修复的点。

修正后的服务器代码

app.post("/signin", async (req, res) => {
  console.log("BODY", req.body); // Express已通过中间件解析req.body,无需await
  try {
    // 正确参数顺序:url -> 空请求体 -> 配置对象
    const xToken = await axios.post(loginUrl, {}, {
      headers: {
        "Content-Type": "application/x-www-form-urlencoded",
        "X-Username": req.body.username,
        "X-Password": req.body.password,
      },
    });
    console.log(xToken.headers);

    // 提取Token并返回给客户端
    res.send({ token: xToken.headers['x-auth-token'] });
  } catch (error) {
    console.log("SERVER Error: ", error.message);
    // 错误时返回客户端明确的错误响应
    res.status(500).send({ error: error.message });
  }
});

补充说明

  1. 无需await req.body:Express配置body-parser后,req.body已解析完成,无需异步等待。
  2. 明确返回Token:客户端需要获取Token,服务器需从响应头提取x-auth-token(HTTP响应头通常为小写)并返回。
  3. 完善错误处理:catch块中返回错误响应,避免客户端请求处于pending状态。

内容的提问来源于stack exchange,提问作者miouri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 14:45:32