如何将 firebase 与 libcurl 连接
how to connect firebase with libcurl
我想使用 libcurl 库将我的代码连接到 firebase 并读取数据我有这样的功能
static size_t my_write(void* buffer, size_t size, size_t nmemb, void* param) {
std::string& text = *static_cast<std::string*>(param);
size_t totalsize = size * nmemb;
text.append(static_cast<char*>(buffer), totalsize);
return totalsize;
}
我有主要功能,例如
int main() {
std::string result;
CURL* curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl,CURLOPT_URL,"https://example-project-62811-default-rtdb.firebaseio.com/.json");
curl_easy_setopt(curl, CURLOPT_PROXY_SSL_OPTIONS, CURLSSLOPT_ALLOW_BEAST |
CURLSSLOPT_NO_REVOKE);
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,my_write);
curl_easy_setopt(curl,CURLOPT_WRITEDATA, &result);
curl_easy_setopt(curl,CURLOPT_VERBOSE, 1L);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
if (CURLE_OK != res) {
std::cerr << "CURL ERROR: " << res << "\n";
}
}
curl_global_cleanup();
std::cout << result << "\n\n";
}
该代码在 https://api.chucknorris.io 等其他 API 上运行良好,我在尝试连接 firebase 时遇到的错误是
- 正在尝试 35.201.97.85:443...
- 连接到 example-project-62811-default-rtdb.firebaseio.com (35.201.97.85) 端口 443 (#0)
- schannel:下一个 InitializeSecurityContext 失败:未知错误 (0x80092013)
- 正在关闭连接 0
- schannel:关闭 SSL/TLS 与 example-project-62811-default-rtdb.firebaseio.com 端口 443 的连接
卷曲错误:35
编辑-1
我还尝试从命令提示符写入 运行,它给了我同样的错误,当我添加 add --ssl-no-revoke 到脚本时它起作用了
curl https://example-project-62811-default-rtdb.firebaseio.com/.json --ssl-no-revoke
正在运行,然后我尝试在我的代码中使用此技术
curl_easy_setopt(curl, CURLOPT_PROXY_SSL_OPTIONS, CURLSSLOPT_ALLOW_BEAST |
CURLSSLOPT_NO_REVOKE);
但它不起作用我该如何解决这个问题?
Schannel 错误代码 0x80092013
表示 Revocation Server Offline
。
在您的情况下,无法获取服务器证书中指定的 Firebase CRL http://crl.pki.goog/GTS1O1.crl
。
这可能是由于 Windows 信任库、DNS、防火墙、代理、公司网络等配置错误造成的。
作为临时(不安全)解决方案,您可以使用
绕过 CRL 验证
curl_easy_setopt(curl, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NO_REVOKE);
注意变量 - CURLOPT_SSL_OPTIONS
。您尝试的 CURLOPT_PROXY_SSL_OPTIONS
仅适用于代理连接。
我想使用 libcurl 库将我的代码连接到 firebase 并读取数据我有这样的功能
static size_t my_write(void* buffer, size_t size, size_t nmemb, void* param) {
std::string& text = *static_cast<std::string*>(param);
size_t totalsize = size * nmemb;
text.append(static_cast<char*>(buffer), totalsize);
return totalsize;
}
我有主要功能,例如
int main() {
std::string result;
CURL* curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl,CURLOPT_URL,"https://example-project-62811-default-rtdb.firebaseio.com/.json");
curl_easy_setopt(curl, CURLOPT_PROXY_SSL_OPTIONS, CURLSSLOPT_ALLOW_BEAST |
CURLSSLOPT_NO_REVOKE);
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,my_write);
curl_easy_setopt(curl,CURLOPT_WRITEDATA, &result);
curl_easy_setopt(curl,CURLOPT_VERBOSE, 1L);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
if (CURLE_OK != res) {
std::cerr << "CURL ERROR: " << res << "\n";
}
}
curl_global_cleanup();
std::cout << result << "\n\n";
}
该代码在 https://api.chucknorris.io 等其他 API 上运行良好,我在尝试连接 firebase 时遇到的错误是
- 正在尝试 35.201.97.85:443...
- 连接到 example-project-62811-default-rtdb.firebaseio.com (35.201.97.85) 端口 443 (#0)
- schannel:下一个 InitializeSecurityContext 失败:未知错误 (0x80092013)
- 正在关闭连接 0
- schannel:关闭 SSL/TLS 与 example-project-62811-default-rtdb.firebaseio.com 端口 443 的连接 卷曲错误:35
编辑-1 我还尝试从命令提示符写入 运行,它给了我同样的错误,当我添加 add --ssl-no-revoke 到脚本时它起作用了
curl https://example-project-62811-default-rtdb.firebaseio.com/.json --ssl-no-revoke
正在运行,然后我尝试在我的代码中使用此技术
curl_easy_setopt(curl, CURLOPT_PROXY_SSL_OPTIONS, CURLSSLOPT_ALLOW_BEAST |
CURLSSLOPT_NO_REVOKE);
但它不起作用我该如何解决这个问题?
Schannel 错误代码 0x80092013
表示 Revocation Server Offline
。
在您的情况下,无法获取服务器证书中指定的 Firebase CRL http://crl.pki.goog/GTS1O1.crl
。
这可能是由于 Windows 信任库、DNS、防火墙、代理、公司网络等配置错误造成的。
作为临时(不安全)解决方案,您可以使用
绕过 CRL 验证 curl_easy_setopt(curl, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NO_REVOKE);
注意变量 - CURLOPT_SSL_OPTIONS
。您尝试的 CURLOPT_PROXY_SSL_OPTIONS
仅适用于代理连接。