Разработка приложений для Internet


Метод 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.


Содержание раздела