使用httplib的C++程序无法建立SSL连接问题求助
问题描述
我正在开发一款需通过REST API与接口通信的C++软件,使用httplib库。编写的代码如下:
httplib::SSLClient cli("https://www.google.com"); httplib::Result res = cli.Get("/doodles"); if (res && res->status == 200) { std::cout << res->body << "\n"; } else { auto err = res.error(); std::cout << httplib::to_string(err) << "\n"; }
运行后报错:Could not establish connection,但在浏览器中输入该URL可正常访问。我尝试在SSLClient构造函数中指定端口443,结果依旧。我的PC已安装OpenSSL,且按如下方式引入httplib:
#define CPPHTTPLIB_OPENSSL_SUPPORT #include <httplib\httplib.h>
请问我该如何解决这个问题?
解决方案
- 修正SSLClient构造参数:SSLClient的第一个参数只需传入主机名,带
https://会导致解析错误,正确写法是:
这是最可能导致连接失败的核心问题。httplib::SSLClient cli("www.google.com", 443); - 配置代理设置:浏览器通常自动读取系统代理,但httplib默认不会。如果你的网络需要代理访问外网,手动添加代理配置:
cli.set_proxy("代理主机名", 代理端口); // 若代理需认证 cli.set_proxy_auth("用户名", "密码"); - 验证OpenSSL链接正确性:确保编译时正确链接OpenSSL的
libssl.lib和libcrypto.lib库文件,且OpenSSL版本与httplib兼容。尝试更新到稳定版OpenSSL后重新编译项目。 - 临时禁用证书验证(仅调试):若因证书验证失败导致连接问题,可临时关闭验证排查:
注意:生产环境禁止使用此设置,需配置正确的CA证书。cli.enable_server_certificate_verification(false); - 检查防火墙/杀毒软件拦截:本地防火墙或杀毒软件可能拦截了程序的网络请求,尝试临时关闭后测试连接。
内容的提问来源于stack exchange,提问作者Tiberius
相关产品推荐
相关产品推荐

