使用RabbitMQ本地主机并尝试使用他的API。当我从邮递员那里打电话时,它工作正常。
但是我试图在我的应用程序代码中使用此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(未经授权)
我想念什么?
谢谢
我本人只是遇到了这个问题。即使我的问题与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来说,它是相同的过程,等等。