如何将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
相关产品推荐
相关产品推荐

