Изменение протокола запроса restsdk - PullRequest
0 голосов
/ 22 декабря 2018

Поэтому я хочу добавить поддержку всех протоколов при выполнении запроса с остальными 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 , решающую эту проблему, но кажется, что она никогда не была решена.

Возможно, у кого-то есть идея, что можетбыть неправым.

1 Ответ

0 голосов
/ 23 декабря 2018

Ладно, похоже, функция просто сломана.Я просто подключил WinHttpOpen, который возвращает дескриптор, который я должен использовать, и функция работала отлично.

...