Как получить данные с WinHttpSendRequest от localhost

Вы можете попробовать это

 $(".textValue").click(function () {
    var spanVal = $(this).text();
    document.execCommand("copy");
    alert(spanVal);
});
0
задан Storm 19 January 2019 в 12:54
поделиться

1 ответ

ошибка 12175, это ERROR_WINHTTP_SECURE_FAILURE. WinHttpSendRequest объясняют, когда возникает эта ошибка и как получить дополнительную информацию о ней:

Одна или несколько ошибок были обнаружены в уровне защищенных сокетов (SSL) [ 1123] сертификат, отправленный сервером. Чтобы определить тип ошибки, проверьте с помощью уведомления WINHTTP_CALLBACK_STATUS_SECURE_FAILURE в функции обратного вызова состояния.

, поэтому для диагностики отладки как минимум вам нужно написать self cb:

void CALLBACK WinHttpStatusCB(
                                      __in  HINTERNET hInternet,
                                      __in  DWORD_PTR dwContext,
                                      __in  DWORD dwInternetStatus,
                                      __in  LPVOID lpvStatusInformation,
                                      __in  DWORD dwStatusInformationLength
                                      )
{
    switch (dwInternetStatus)
    {
    case WINHTTP_CALLBACK_STATUS_SECURE_FAILURE:
        if (lpvStatusInformation && dwStatusInformationLength == sizeof(ULONG))
        {
            DbgPrint("SECURE_FAILURE:[%x]\n", *(PULONG)lpvStatusInformation);
            // ...
        }
        break;
    //...
    }
}

и активировать его:

WinHttpSetStatusCallback(hSession, WinHttpStatusCB, WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS, 0);

или

WinHttpSetStatusCallback(hSession, WinHttpStatusCB, WINHTTP_CALLBACK_FLAG_SECURE_FAILURE, 0);
[1132 ] с этим вы можете точно указать причину сбоя - несколько WINHTTP_CALLBACK_STATUS_FLAG_* флагов.

Если аргумент dwInternetStatus равен WINHTTP_CALLBACK_STATUS_SECURE_FAILURE, то lpvStatusInformation указывает на DWORD, которое является побитовой ИЛИ комбинацией одного или нескольких из следующих значений. прочитайте подробнее

однако и из общего вида мы можем понять - CN в сертификате, который использует сервер, должен совпадать с именем DNS сайта, используемым в запросе. если вы используете localhost здесь - тогда CN-имя сертификата сервера также должно быть локальным хостом, или вы получили минимальное значение WINHTTP_CALLBACK_STATUS_FLAG_CERT_CN_INVALID:

Общее имя SSL-сертификата (поле имени хоста) неверно, например, если вы ввели localhost и общее имя в сертификате говорит heilpraxis-einssein.de .

для отсутствия таких ошибок вы можете использовать WinHttpSetOption с WINHTTP_OPTION_SECURITY_FLAGS . вам нужно подумать, как минимальный набор SECURITY_FLAG_IGNORE_CERT_CN_INVALID

допускает недопустимое общее имя в сертификате; то есть имя сервера, указанное приложением, не совпадает с общим именем в сертификате. Если этот флаг установлен, приложение не получает обратный вызов WINHTTP_CALLBACK_STATUS_FLAG_CERT_CN_INVALID.

, но можно установить несколько флагов:

            ULONG flags = 
                SECURITY_FLAG_IGNORE_UNKNOWN_CA|
                SECURITY_FLAG_IGNORE_CERT_DATE_INVALID|
                SECURITY_FLAG_IGNORE_CERT_CN_INVALID|
                SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE;

            WinHttpSetOption(hRequest, WINHTTP_OPTION_SECURITY_FLAGS, &flags, sizeof(flags));
0
ответ дан RbMm 19 January 2019 в 12:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: