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

如何将curl请求转为Node.js GET请求?request库调用失败

解决curl转Node.js request库GET请求失败的问题

我来帮你搞定这个问题!你的curl命令里用了-u keyid:keysecret,这其实是HTTP基本认证(Basic Authentication),你的request调用失败大概率是因为没正确配置这个认证信息。先给你拆解下关键点,再给你正确的代码示例:

先搞懂curl的-u参数

curl -u keyid:keysecret 会自动把keyid:keysecret做Base64编码,然后放到请求头的Authorization: Basic <编码后的字符串>字段里,这就是命令行能成功的核心原因。

正确的request库实现代码

把你的代码改成这样(记得替换成自己的keyid和keysecret):

const request = require('request');
const express = require('express');
const app = express();

// 替换成你自己的密钥信息
const YOUR_KEY_ID = '你的keyid';
const YOUR_KEY_SECRET = '你的keysecret';

app.get('/api/balance', (req, res) => {
  request.get({
    url: 'https://api.mybitx.com/api/1/balance',
    // 配置HTTP基本认证,request会自动处理编码
    auth: {
      user: YOUR_KEY_ID,
      pass: YOUR_KEY_SECRET,
      sendImmediately: true // 关键:确保第一次请求就发送认证头,避免某些API返回401后再重试的问题
    }
  }, (error, response, body) => {
    // 调试用:打印错误和响应状态,方便排查问题
    if (error) {
      console.error('请求出错:', error);
      return res.status(500).send('请求失败');
    }
    console.log('响应状态码:', response.statusCode);
    console.log('响应内容:', body);
    res.send(body);
  });
});

app.listen(3000, () => {
  console.log('服务器跑在http://localhost:3000啦,访问/api/balance试试');
});

备选方案:手动构造认证头

如果上面的方式还是有问题,也可以手动生成Authorization头,效果是一样的:

const request = require('request');
const express = require('express');
const app = express();

const YOUR_KEY_ID = '你的keyid';
const YOUR_KEY_SECRET = '你的keysecret';
// 手动生成Base64编码的认证字符串
const base64Auth = Buffer.from(`${YOUR_KEY_ID}:${YOUR_KEY_SECRET}`).toString('base64');

app.get('/api/balance', (req, res) => {
  request.get({
    url: 'https://api.mybitx.com/api/1/balance',
    headers: {
      'Authorization': `Basic ${base64Auth}`
    }
  }, (error, response, body) => {
    if (error) {
      console.error('请求出错:', error);
      return res.status(500).send('请求失败');
    }
    console.log('响应状态码:', response.statusCode);
    console.log('响应内容:', body);
    res.send(body);
  });
});

app.listen(3000, () => {
  console.log('服务器跑在http://localhost:3000啦,访问/api/balance试试');
});

可能的错误排查点

  • 忘记配置认证信息:这是最常见的坑,一定要确保auth参数或者Authorization头正确设置
  • sendImmediately没开:有些API要求第一次请求就带认证头,默认情况下request会等服务器返回401再发认证,这时候就会失败
  • 密钥拼写错误:仔细检查keyid和keysecret有没有多余空格或者拼写错误
  • 网络/代理问题:命令行能通但Node.js不行,可能是Node环境的代理配置和终端不一样,可以尝试在request里加代理参数(如果需要的话)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:14:01