Метод QueryInfo
Метод QueryInfo позволяет узнать ответ сервера на переданный ему запрос и заголовки самого запроса. Вы можете использовать данный метод после передачи запроса серверу с помощью метода SendRequest и или после того как вы открыли объект на сервере Internet с помощью метода OpenURL.
В состав класса входят три варианта метода QueryInfo, отличающихся набором параметров. Вы можете использовать тот метод, который наиболее подходит для выполнения ваших задач:
BOOL QueryInfo(
DWORD dwInfoLevel,
LPVOID lpvBuffer,
LPDWORD lpdwBufferLength,
LPDWORD lpdwIndex = NULL
) const;
BOOL QueryInfo(
DWORD dwInfoLevel,
CString& str,
LPDWORD dwIndex = NULL
) const;
BOOL QueryInfo(
DWORD dwInfoLevel,
SYSTEMTIME* pSysTime,
LPDWORD dwIndex = NULL
) const;
Тип информации, запрашиваемой методом QueryInfo, определяется параметром dwInfoLevel, одинаковым у всех трех реализаций метода. В качестве этого параметра следует указать комбинацию атрибута и флага, определяющего тип получаемой информации:
Флаг | Назначение | ||
HTTP_QUERY_CUSTOM | Определяет имя заголовка и записывает его в буфер lpvBuffer | ||
HTTP_QUERY_FLAG_REQUEST_HEADERS | Данный флаг позволяет узнать заголовок запроса который был передан на сервер | ||
HTTP_QUERY_FLAG_SYSTEMTIME | Некоторые заголовки содержат дату и время. Чтобы не утруждать себя разбором строки с датой и временем следует указать данный флаг и воспользоваться третьим вариантом метода QueryInfo, который сразу занесет эти данные в структуру типа SYSTEMTIME. | ||
HTTP_QUERY_FLAG_NUMBER | Для тех заголовков, которые имеют числовые значения вы можете воспользоваться флагом HTTP_QUERY_FLAG_NUMBER. В этом случае запрашиваемые данные будут получены в виде 32-битового числа. |
В следующей таблице перечислены возможные атрибуты, которые можно указывать в параметре dwInfoLevel:
Значения параметра lpdwIndex и dwIndex | |
HTTP_QUERY_MIME_VERSION | |
HTTP_QUERY_CONTENT_TYPE | |
HTTP_QUERY_CONTENT_TRANSFER_ENCODING | |
HTTP_QUERY_CONTENT_ID | |
HTTP_QUERY_CONTENT_DESCRIPTION | |
HTTP_QUERY_CONTENT_LENGTH | |
HTTP_QUERY_ALLOWED_METHODS | |
HTTP_QUERY_PUBLIC_METHODS | |
HTTP_QUERY_DATE | |
HTTP_QUERY_EXPIRES | |
HTTP_QUERY_LAST_MODIFIED | |
HTTP_QUERY_MESSAGE_ID | |
HTTP_QUERY_URI | |
HTTP_QUERY_DERIVED_FROM | |
HTTP_QUERY_LANGUAGE | |
HTTP_QUERY_COST | |
HTTP_QUERY_WWW_LINK | |
HTTP_QUERY_PRAGMA | |
HTTP_QUERY_VERSION | |
HTTP_QUERY_STATUS_CODE | |
HTTP_QUERY_STATUS_TEXT | |
HTTP_QUERY_RAW_HEADERS | |
HTTP_QUERY_RAW_HEADERS_CRLF |
Данные, полученные методом QueryInfo, записываются либо в буфер lpvBuffer, либо в строку str, либо в структуру типа SYSTEMTIME, в зависимости от того, какой из прототипов метода используется.
Если вы используете первый прототип метода, то размер буфера вы должны записать в переменной типа DWORD и передать указатель на нее через параметр lpdwBufferLength. После вызова метода в эту переменную будет записана длина строки минус единица.
Чтобы перебрать множественные заголовки с одним и тем же именем вы должны использовать индекс заголовка, который передается через параметр lpdwIndex (или dwIndex) и начинается с нулевого значения. Перед вызовом метода запишите в этот параметр индекс заголовка, который надо получить. После того как метод завершит свою работу, в него будет записан индекс следующего заголовка или значение ERROR_HTTP_HEADER_NOT_FOUND.
В случае успешного завершения метод QueryInfo возвращает ненулевое значение. Если метод завершился с ошибкой, то он возвращает ноль, а причину ошибки можно узнать с помощью функции GetLastError.