Поэтому я хочу добавить поддержку всех протоколов при выполнении запроса с остальными SDK.Это протоколы по умолчанию, поддерживаемые для Windows:
По умолчанию в Windows 7 и Windows 8 включены только SSL3 и TLS1. По умолчанию только SSL3, TLS1.0, TLS1.1 и TLS1.2включены в Windows 8.1 и Windows 10.
Перед созданием запроса я настроил http_client_config и создал обратный вызов для set_nativehandle_options, который выглядит следующим образом:
std::function<void(web::http::client::native_handle)> get_callback()
{
auto func = [&](const web::http::client::native_handle handle)
{
std::cout << "handle: " << std::hex << handle << std::endl;
DWORD secure_protocols = WINHTTP_FLAG_SECURE_PROTOCOL_ALL;
if (!WinHttpSetOption(handle, WINHTTP_OPTION_SECURE_PROTOCOLS, &secure_protocols, sizeof(secure_protocols)))
{
std::cout << "Can not set WINHTTP_FLAG_SECURE_PROTOCOL_ALL" << std::endl;
std::cout << std::dec << GetLastError() << std::endl;
}
else
std::cout << "Set WINHTTP_FLAG_SECURE_PROTOCOL_ALL" << std::endl;
};
return func;
}
Итакв основном проблема в том, что WinHttpSetOption всегда возвращает ERROR_INTERNET_INCORRECT_HANDLE_TYPE.К сожалению, это противоречит утверждению на этом веб-сайте:
native_handle имеет следующий тип в зависимости от базовой платформы: рабочий стол Windows, WinHTTP - HINTERNET Windows Runtime, WinRT - IXMLHTTPRequest2 *....
Я обнаружил проблему github , решающую эту проблему, но кажется, что она никогда не была решена.
Возможно, у кого-то есть идея, что можетбыть неправым.