gpt4 book ai didi

c - hiredis 失败,主机名中包含用户名和密码

转载 作者:可可西里 更新时间:2023-11-01 11:14:08 29 4
gpt4 key购买 nike

我正在尝试在 CentOS 上以 C 运行 hiredis

下面的代码似乎运行良好:

...
const char *hostname = "my.redis-as-a-service.com";
int port = 8765;

const char *cert = "-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----\n";
const char *key = "-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----\n";
const char *ca = "-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----\n";

struct timeval tv = { 1, 500000 }; // 1.5 seconds
redisOptions options = {0};
REDIS_OPTIONS_SET_TCP(&options, hostname, port);
options.timeout = &tv;
c = redisConnectWithOptions(&options);

if (c == NULL || c->err) {
if (c) {
printf("Connection error: %s\n", c->errstr);
redisFree(c);
} else {
printf("Connection error: can't allocate redis context\n");
}
exit(1);
}

if (redisSecureConnection(c, ca, cert, key, "sni") != REDIS_OK) {
printf("Couldn't initialize SSL!\n");
printf("Error: %s\n", c->errstr);
redisFree(c);
exit(1);
}

但是当我尝试针对 Compose.com 运行它时,它需要 url 中的 usernamepassword,例如:

const char *hostname = "USERNAME:PASSWORD@my.redis-as-a-service.com";

然后它会在没有特定错误的情况下失败。简单:

Connection error: Name or service not known

最佳答案

您不能在主机名字符串中指定用户名和密码。整个字符串被视为主机名,DNS 查找失败。

相反,你必须这样做:

首先,在没有身份验证凭据的情况下正常连接。

成功后,就可以进行身份​​验证了

redisCommand(c, "AUTH password");

请注意,redis 不支持用户名,因此您无法指定。

关于c - hiredis 失败,主机名中包含用户名和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57657493/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com