• XSS.stack #1 – первый литературный журнал от юзеров форума

Content-Lenght WinInet

Jeffs

(L1) cache
Забанен
Регистрация
28.12.2018
Сообщения
611
Реакции
358
Пожалуйста, обратите внимание, что пользователь заблокирован
В общем пытаюсь получить Content-Lenght таким образом:
C:
DWORD GetContentSize(HINTERNET requesthandle)
{
    DWORD content_length = 0;
    DWORD content_lengt_size = sizeof(DWORD);

    if (!HttpQueryInfoW(requesthandle, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, &content_length, &content_lengt_size, NULL)) {
        return 0;
    }

    return content_length;
}

Шлю GET-запрос на сервер:
C:
DWORD GetRequest(LPCWSTR host, BOOL isSsl, LPCWSTR req, DWORD* responseSize, LPWSTR response)
{
    HINTERNET hInternet = NULL, hConnect = NULL, hRequest = NULL;

    hInternet = InternetOpenW(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);

    if (hInternet == NULL)
    {
        return INVALID_INTERNET_SESSION;
    }

    hConnect = InternetConnectW(hInternet, host, isSsl ? INTERNET_DEFAULT_HTTPS_PORT : INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, NULL);

    if (hConnect == NULL)
    {
        InternetCloseHandle(hInternet);

        return INTERNET_CONNECT_ERROR;
    }

    hRequest = HttpOpenRequestW(hConnect, L"GET", req, NULL, NULL, NULL, isSsl ? INTERNET_FLAG_SECURE : INTERNET_FLAG_KEEP_CONNECTION, 0);

    if (hRequest == NULL)
    {
        InternetCloseHandle(hConnect);
        InternetCloseHandle(hInternet);

        return INVALID_REQUEST;
    }

    if (!HttpSendRequestW(hRequest, NULL, 0, NULL, 0))
    {
        InternetCloseHandle(hRequest);
        InternetCloseHandle(hConnect);
        InternetCloseHandle(hInternet);

        return SEND_REQ_ERROR;
    }

    *responseSize = GetContentSize(hRequest);

    LPVOID buff = calloc(*responseSize, sizeof(wchar_t));

    DWORD dwByteRead;
    InternetReadFile(hRequest, buff, dataSize, &dwByteRead);

    ASCIIToUnicode((char*)buff, response);
    free(buff);

    InternetCloseHandle(hRequest);
    InternetCloseHandle(hConnect);
    InternetCloseHandle(hInternet);

    return 0;
}
error = GetRequest(L"127.0.0.1", FALSE, L"/hello/", &responseSize, serverResponse);

Ответ сервера:
image.png


Но по итогу responseSize равен 0. С чем это может быть связано? Или как реализовать получение Content-Lenght правильно?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Не знаю, с чем связана твоя проблема, но ты можешь попросту читать ответ при помощи InternetReadFile, получать количество прочитанных байт, и аллоцировать/реаллоцировать буффер в зависимости от ситуации. А когда количество прочитанных байт будет равно нулю - ответ получен полностью.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Не знаю, с чем связана твоя проблема, но ты можешь попросту читать ответ при помощи InternetReadFile, получать количество прочитанных байт, и аллоцировать/реаллоцировать буффер в зависимости от ситуации. А когда количество прочитанных байт будет равно нулю - ответ получен полностью.
Хотелось бы глянуть код
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Хотелось бы глянуть код
C:
DWORD dwRead = 0;

while (true)
{
    if (FALSE == InternetReadFile( ..., &dwRead))
    {
        break;
    }
    
    if (0 == dwRead)
    {
        break;
    }
    
    if (NULL == tmpBuffer)
    {
        tmpBuffer = (PBYTE)Alloc(...)
    }
    else
    {
        tmpBuffer = (PBYTE)ReAlloc(...)
    }
}
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх