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

如何使用node-libcurl实现Digest认证的POST请求并解决报错

使用node-libcurl实现Digest认证并解决TypeError报错

问题描述

在Ubuntu终端测试需Digest认证的接口时,使用的curl命令如下:

curl --digest -u username:pass --location --request POST 'http://url' \
--header 'Content-Type: application/json'

改用node-libcurl库在Node.js中实现时,编写了以下代码但运行报错:

const { curly } = require('node-libcurl')

exports.test = async () => {

var user = 'user';
var pass = '45213';

var auth = new Buffer.alloc(user + ':' + pass).toString('base64');

const { data } = await curly.post('http://url', {
    postFields: JSON.stringify({ field: 'value' }),
    httpHeader: [
      'Content-Type: application/json',
      'Accept: application/json',
      `Authorization: Basic  + ${auth}`
    ],
})
      
      console.log(data);
};

报错信息:

TypeError [ERR_INVALID_ARG_TYPE]: The "size" argument must be of type number.

解决方法

1. 修复TypeError报错

报错根源是Buffer.alloc()用法错误:该方法第一个参数要求传入数字类型的内存大小,但你传入了字符串user + ':' + pass。如果要将字符串转换为base64,应使用Buffer.from()方法。同时你拼接Authorization头的语法有误,多余了空格和加号,正确写法如下(仅作语法修正,这是Basic认证的写法,并非你需要的Digest认证):

var auth = Buffer.from(`${user}:${pass}`).toString('base64');
// 对应Header写法
`Authorization: Basic ${auth}`

2. 正确实现Digest认证

node-libcurl的curly模块内置支持Digest认证,无需手动构造Authorization头,只需配置两个参数即可对应curl的--digest和-u选项:

  • httpAuth: CurlAuth.DIGEST:指定使用Digest认证方式
  • userpwd: ${user}:${pass}``:传入用户名和密码组合

完整修正代码:

const { curly, CurlAuth } = require('node-libcurl')

exports.test = async () => {
  const user = 'user';
  const pass = '45213';

  try {
    const { data } = await curly.post('http://url', {
      postFields: JSON.stringify({ field: 'value' }),
      httpHeader: [
        'Content-Type: application/json',
        'Accept: application/json'
      ],
      // 配置Digest认证
      httpAuth: CurlAuth.DIGEST,
      userpwd: `${user}:${pass}`
    })
    console.log(data);
  } catch (error) {
    console.error('请求失败:', error);
  }
};

额外说明

  • node-libcurl会自动处理Digest认证的握手流程,和curl命令--digest的行为完全一致,无需手动干预认证头
  • 添加try/catch可以更清晰地捕获请求过程中的各类错误,便于调试
  • 建议使用最新版node-libcurl,避免版本兼容问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:25:19