WinInet, 301 редирект и отличия в версиях

131
08 ноября 2019, 03:20

Подскажите пожалуйста, есть функция для GET запроса через WinInet. Она отлично отрабатывает на Win10 (мой домашний ПК) и на Win7 (один из серверов). Однако сегодня довелось тестировать ее на Windows Server 2008, и о чудо - тогда как на Win10 и Win7 я вижу через сниффер трафика, что мой софт сделал запрос на нужную ссылку, получил 301 редирект, и сделал запрос на https://, то ТОТ ЖЕ САМЫЙ .exe файл на WinServer делает один запрос по 80 порту, получает 301 редирект, и все, запрос на HTTPS не делается. С чем может быть связана такая проблема, куда копать? Конкретно запрос выглядит так (здесь без получения данных, но тем не менее):

    BOOL HTTP::RequestGET(const TCHAR* lptUrl)
{
    t_string sUrl(lptUrl);
    int n = sUrl.find(TEXT("http://"));
    if (n != sUrl.npos) sUrl.erase(n, 7);
    n = sUrl.find('/');
    t_string sHost(sUrl.substr(0, n));
    sUrl.erase(0, n); n = 0;
    _tcsncpy_s(db.szUrl, MAX_PATH, lptUrl, MAX_PATH - 1);
    DWORD dwAccess = INTERNET_OPEN_TYPE_PRECONFIG;
    if (db.pProxyServer) {
        dwAccess |= INTERNET_OPEN_TYPE_PROXY;
    }
    HINTERNET hInetSession = InternetOpen(db.lptClient, dwAccess, db.pProxyServer, 0, 0);
    if (hInetSession)
    {
        BOOL bVar = 1;
        InternetSetOption(hInetSession, INTERNET_OPTION_HTTP_DECODING, &bVar, sizeof(BOOL));
        HINTERNET hConnect = InternetConnect(hInetSession, sHost.c_str(),
            INTERNET_DEFAULT_HTTP_PORT, db.pProxyName, db.pProxyPass, INTERNET_SERVICE_HTTP, 0, 1u);
        if (hConnect)
        {
            HINTERNET hRequest = HttpOpenRequest(hConnect, TEXT("GET"), sUrl.c_str(), 0, 0, 0,
                INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_RELOAD, 1);
            if (hRequest)
            {
                AddHeaders(hRequest);
                BOOL bSend = HttpSendRequest(hRequest, 0, 0, 0, 0);
                if (bSend)
                {
                    n = (UINT)ReadData(hRequest);
                }
                InternetCloseHandle(hRequest);
            }
            InternetCloseHandle(hConnect);
        }
        InternetCloseHandle(hInetSession);
    }
    if (n > 0) return 1; else return 0;
}
READ ALSO
Создание копии на указатель

Создание копии на указатель

Как можно скопировать из указателя на int в новую переменную, пытаюсь

144
не выводит строку [закрыт]

не выводит строку [закрыт]

Программа выводи количество, цену, общую сумму, но не выводит номер товара и его названиеЧто не так?

141
Передача данных из одного окна в другое. QT C++

Передача данных из одного окна в другое. QT C++

Возникла такая проблема - не могу передать текст из QLineEdit в QLabelНе знаю, почему, вроде все сделал правильно, но вот не работает

184
Сделать запрос к сайту Java [закрыт]

Сделать запрос к сайту Java [закрыт]

Сделать запрос к сайту, полученную инфу записать в файл или если json распарсить

152