【问题标题】:node curl error "Received HTTP code 503 from proxy after CONNECT"节点卷曲错误“CONNECT 后从代理收到 HTTP 代码 503”
【发布时间】:2021-03-25 17:45:37
【问题描述】:

在使用 POST 请求对 API 进行身份验证后,我获得了一个 JWT 令牌。

使用该令牌,我可以在命令提示符下成功调用curl

curl --request GET https://corpURL/customer/wlsAccountManagement/v1/billingAccount/23435657 --header "env: it04" --header "Authorization: Bearer tokenstring..."

但是当我尝试在节点中执行它时,它会以Received HTTP code 503 from proxy after CONNECT 失败。

我什至在命令提示符下尝试了基本的 curl 并且它有效:

curl -v https://corpURL/customer/wlsAccountManagement/v1/billingAccount/23435657

它只是告诉我我未经授权{"message":"Unauthorized"},这是正确的。

在节点中,我什至无法获得{"message":"Unauthorized"},它仍然给我Received HTTP code 503 from proxy after CONNECT

我使用 curl 的原因是因为我可以看到更多信息。使用 axios 它会给我一个 "socket hang up" 错误。

一天多来,我一直试图让它工作并在线搜索解决方案。有谁知道这里发生了什么?为什么它在命令提示符下有效,但在节点中无效?谢谢!

【问题讨论】:

  • 它看起来像后端的一个错误。您可以从服务器访问更详细的日志吗?
  • 后端API?还是我正在制作的后端?除了令牌调用,然后是对数据的 GET 请求,我什么都没有,这是问题所在。 GET 请求的 corp API 是可靠的,它有效,终端中的 curl 证明它有效,另一个团队有一个旧节点项目,他们使用 axios.get() 请求并且它有效。我不明白为什么我的简单请求没有,为什么 curl 也没有。谢谢!
  • 在您的 curl 示例中,您将标题“env”设置为“it04”。您是否在节点调用中设置它?也许缺少它会导致 corp API 出现一些错误行为?
  • 是的,const headers = { Authorization: Bearer ${token}, 'Content-Type': 'application/json', env: 'it04', };

标签: node.js curl


【解决方案1】:

对于任何无法使用 curl 的 exec 在 node 中工作或使用包 axios 或 request 的人,请在 node 中使用 https 包,如下所示:

const options = {
    hostname: 'hostDomain', // no https protocol
    port: 443,
    path: '/path/to/get',
    method: 'GET',
    headers: {
      Authorization: `Bearer tokenString`,
      'Content-Type': 'application/json',
    },
  };

  const req = https.request(options, response => {
    response.on('data', d => {
      process.stdout.write(d);
    });
  });

  req.on('error', e => {
    console.error(e);
  });

  req.end();

到目前为止,这是我在 node.js 中获得响应的唯一方法。我可能会调整结构,因为它看起来不那么干净,但它有效!您可能还需要为您的证书文件NODE_EXTRA_CA_CERTS=cert.pem 设置环境变量,就像我已经拥有的那样。和平。

编辑

我找到了一个使用 axios 的解决方案,你需要创建一个带有 baseURL 的实例,就像 https 请求一样:

const axiosInstance = axios.create({
    baseURL: 'https://corpURL',
    headers: {
      Authorization: `Bearer ${token}`,
      'Content-Type': 'application/json',
      env: 'it04',
    },
  });

  axiosInstance
    .get('/get/path')
    .then(response => console.log('response', response.data))
    .catch(err => console.log('err', err));

【讨论】:

    猜你喜欢
    • 2015-10-13
    • 2017-06-25
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 2021-08-21
    • 1970-01-01
    • 2014-10-10
    相关资源
    最近更新 更多