rabbitmq - RabbitMQ HTTP API 返回 401(未经授权)
问题描述
使用 RabbitMQ localhost 并尝试使用他的 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'}
});
}
POST http://localhost:15672/api/queues/%2F/QA.MOBILE/get net::ERR_ABORTED 401(未经授权)
我错过了什么?
谢谢
解决方案
我自己也遇到了这个问题。尽管我的问题与 CORS 无关,但我想我会在此处记录该问题,以防将来的读者遇到同样的问题。
我的问题是我没有正确地对用户凭据进行 base64 处理。在浏览器中,您可以像这样调用任何RabbitMQ API 端点:
http://somename:somepassword@servername:15672/api/cluster-name
但是当以编程方式调用它时,您需要从 url 中删除凭据并改为 base 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 等是相同的过程。
推荐阅读
- python - 神经网络比 RandomForest 效果更差
- javascript - 存储在 vuex axios 响应中无法正常工作
- php - linux上的教义:无法连接到sql server
- android - 不确定的进度条情况
- android - 右侧的 BottomAppBar 项
- assembly - 将 ASCII 十进制字符串转换为整数
- mysql - 'connect by' 或 'WITH RECURSIVE' 甚至可以在高度连接的大数据场景中使用吗?
- html - 将每 2 行设置为另一种颜色
- java - JAX-RS(球衣实现)ExceptionMapper
没有捕获 ConstraintViolationException - bash - Bash 脚本取回一个目录