RabbitMQ HTTP API返回401(未经授权)

问题描述 投票:1回答:1

使用RabbitMQ本地主机并尝试使用他的API。当我从邮递员那里打电话时,它工作正常。

enter image description here

但是我试图在我的应用程序代码中使用此API,但出现401错误:

const test = {
  count: 5,
  ackmode: 'ack_requeue_true',
  encoding: 'auto',
  truncate: 50000
}

  testPost() {
    fetch('http://localhost:15672/api/queues/%2F/QA.MOBILE/get', {
      method: 'post',
      mode: 'no-cors',
      body: JSON.stringify(test),
      headers: {Authorization: 'Basic ' + btoa('guest:guest'), Accept: 'application/json', 'Content-Type': 'application/json'}
    });
  }

POSThttp://localhost:15672/api/queues/%2F/QA.MOBILE/getnet :: ERR_ABORTED 401(未经授权)

我想念什么?

谢谢

rabbitmq
1个回答
0
投票

我本人只是遇到了这个问题。即使我的问题与CORS无关,我还是想在这里记录下该问题,以防将来的读者遇到同样的问题。

我的问题是我没有正确地对用户凭据进行base64设置。在浏览器中,您可以像这样调用任何RabbitMQ API endpoints

http://somename:somepassword@servername:15672/api/cluster-name

但是,当以编程方式调用它时,您需要从url中删除凭据,并以64为基数。

using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("GET"), "http://servername:15672/api/cluster-name"))
    {
        var base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes($"somename:somepassword"));
        request.Headers.TryAddWithoutValidation("Authorization", $"Basic {base64authorization}");

        var response = httpClient.SendAsync(request).Result;

        if (response.IsSuccessStatusCode == true)
        {
            string jsonContent = response.Content.ReadAsStringAsync().Result;
        }
    }
}

上面的代码是C#,但是对于Java来说,它是相同的过程,等等。

© www.soinside.com 2019 - 2024. All rights reserved.