我如何 POST 使用 Node 进行摘要身份验证的消息?

How do I POST a message with digest authentication using Node?

我正在尝试 POST 使用 Node.js 向具有摘要安全性的 MarkLogic 应用程序服务器发送消息。等效的 curl 请求工作正常:

curl -v -X POST --anyauth -u admin:admin --header "Content-Type:application/json" \
  -d '{"user-name":"joe", "password": "cool"}' http://localhost:8002/manage/v2/users

我尝试使用 NPM request module,它说它支持摘要请求。我能够成功地执行 GET 请求。这是 POST 的一次尝试:

request(
  {
    'url': 'http://localhost:8000/manage/v2/users',
    'method': 'POST',
    'auth': {
      'user': 'admin',
      'password': 'admin',
      'sendImmediately': false
    },
    'followRedirect': true,
    'followAllRedirects': true,
    'json': true,
    'body': {'user-name':'joe', 'password': 'cool'}
  },
  function(error, response, body) {
    console.log('callback: ' + response.statusCode);
  }
);

那是我的 401。用户名和密码是正确的。我也这样试过:

request
  .post(
    'http://localhost:8000/manage/v2/users', 
    {'user-name':'joe', 'password': 'cool'})
  .auth('admin', 'admin', false)
  .on('response', function(response) {
    console.log('response: ' + JSON.stringify(response));
  })
  .on('error', function(error) {
    console.log('error: ' + error);
  });

这让我得到了 302。我觉得我一定错过了一些直截了当的东西。

我很确定遇到此问题时的解决方案是将应用服务器中的身份验证设置从 "digest" 更改为 "digestbasic"。 (回答是因为我没有足够的代表在任何地方发表评论。)

事实证明这是一个简单的解决方案:curl 请求有效,因为我使用了 localhost:8002;节点请求失败,因为我使用了 localhost:8000。呃。 302 重定向告诉我使用 8002,我只是错过了。