hiredis 失败,主机名中包含用户名和密码
hiredis fails with username and password in hostname
我正在 运行 hiredis
C
CentOS
。
下面的代码似乎 运行 没问题:
...
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 中的 username
和 password
,例如:
const char *hostname = "USERNAME:PASSWORD@my.redis-as-a-service.com";
然后它在没有特定错误的情况下失败。简单:
Connection error: Name or service not known
您不能在主机名字符串中指定用户名和密码。整个字符串被视为主机名,DNS 查找失败。
相反,您必须这样做:
首先,无需身份验证凭据即可正常连接。
成功后,您可以使用
进行身份验证
redisCommand(c, "AUTH password");
请注意 redis
不支持用户名,因此您不能指定。
我正在 运行 hiredis
C
CentOS
。
下面的代码似乎 运行 没问题:
...
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 中的 username
和 password
,例如:
const char *hostname = "USERNAME:PASSWORD@my.redis-as-a-service.com";
然后它在没有特定错误的情况下失败。简单:
Connection error: Name or service not known
您不能在主机名字符串中指定用户名和密码。整个字符串被视为主机名,DNS 查找失败。
相反,您必须这样做:
首先,无需身份验证凭据即可正常连接。
成功后,您可以使用
进行身份验证redisCommand(c, "AUTH password");
请注意 redis
不支持用户名,因此您不能指定。