微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将 firebase 与 libcurl 连接

如何解决如何将 firebase 与 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:关闭与 example-project-62811-default-rtdb.firebaseio.com 端口 443 的 SSL/TLS 连接 卷曲错误:35

edit-1 我还尝试从命令提示符编写运行,它给了我同样的错误,当我添加 add --ssl-no-revoke 到脚本时,它工作了

curl https://example-project-62811-default-rtdb.firebaseio.com/.json --ssl-no-revoke

正在工作,然后我尝试在我的代码中使用这种技术

curl_easy_setopt(curl,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 仅用于代理连接。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。