C++ 我在卡萨布兰卡遇到了问题+;使用包含https的URL时
我们正在使用C++ 我在卡萨布兰卡遇到了问题+;使用包含https的URL时,c++,https,casablanca,C++,Https,Casablanca,我们正在使用资源所有者凭据使用内部OAuth Svr获取访问令牌。如果url中不包含任何https,那么一切都正常,但当我在其中包含https时,一切都失败了 我们使用https部署了所有站点: 下面是一个非常简单的失败代码。如果我在其中包含https,我不知道为什么会出现异常 try { http_client api(U("https://172.27.12.207/AuthSvr"), m_http_config); ucout << "Requesting a
资源所有者凭据
使用内部OAuth Svr
获取访问令牌。如果url中不包含任何https,那么一切都正常,但当我在其中包含https时,一切都失败了
我们使用https部署了所有站点:
下面是一个非常简单的失败代码。如果我在其中包含https
,我不知道为什么会出现异常
try
{
http_client api(U("https://172.27.12.207/AuthSvr"), m_http_config);
ucout << "Requesting account information:" << std::endl;
ucout << "Information: " << api.request(methods::GET, U("identity/.well-known/openid-configuration")).get().extract_json().get() << std::endl;
//TestRestAPI().wait();
}
catch (...)
{
ucout << "Unknown Error";
}
尝试验证自签名证书时会出现此问题。
这通常出现在开发中,在开发中没有使用有效的证书,但生成了一个动态证书
可以通过禁用验证来解决此问题
web::http::client::http_client_config config;
config.set_validate_certificates(false);
auto client = std::make_shared<web::http::client::http_client>(U("https://localhost:8081/"), config);
web::http::client::http\u client\u config;
config.set_validate_证书(false);
自动客户端=标准::使共享(U)https://localhost:8081/(pdf格式),;
请确保舒尔仅在调试测试代码中完成此操作,而不是最终产品的一部分。//创建HTTP请求句柄。
shRequest=WinHttpOpenRequest(shConnect,L“GET”,L”/robots.txt),
NULL,WINHTTP\u无\u引用程序,
WINHTTP\u默认\u接受\u类型,
0 ); //WINHTTP_标志(安全)
在我的例子中,一个类似的问题通过注释掉WINHTTP\u标志\u安全标志得到了解决。您能写下您得到的异常吗?我处理异常以捕获web::http::http\u异常,我看到错误“WinHttpSendRequest:12175:发生了安全错误”该问题与证书验证有关。由于大多数开发环境使用自签名证书,验证失败,导致HTTPS事务失败。解决方法是禁用证书验证。将此粘贴为答案。
web::http::client::http_client_config config;
config.set_validate_certificates(false);
auto client = std::make_shared<web::http::client::http_client>(U("https://localhost:8081/"), config);