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

Метод OpenRequest


Метод OpenRequest создает запрос для передачи его серверу WWW. После того, как запрос создан, его можно модифицировать при помощи метода AddRequestHeaders класса CHttpFile, а затем передать серверу, вызвав метод SendRequest, входящий в состав класса CHttpFile.

Определены два варианта метода OpenRequest. Ниже мы привели для вас их прототипы:

CHttpFile* OpenRequest(

   LPCTSTR pstrVerb,

   LPCTSTR pstrObjectName,

   LPCTSTR pstrReferer = NULL,

   DWORD dwContext = 1,

   LPCTSTR* pstrAcceptTypes = NULL,

   LPCTSTR pstrVersion = NULL,

   DWORD dwFlags = INTERNET_FLAG_EXISTING_CONNECT

);

 

CHttpFile* OpenRequest(



   int nVerb,

   LPCTSTR pstrObjectName,

   LPCTSTR pstrReferer = NULL,

   DWORD dwContext = 1,

   LPCTSTR* pstrAcceptTypes = NULL,

   LPCTSTR pstrVersion = NULL, 

   DWORD dwFlags = INTERNET_FLAG_EXISTING_CONNECT

);

Представленные варианты метода OpenRequest отличаются только типом первого параметра. Этот параметр определяет команду, которая передается в запросе.

В первом варианте метода OpenRequest параметр pstrVerb должен содержать указатель на строку с командой в текстовом виде. Если использовать в качестве pstrVerb значение NULL, то по умолчанию передается команда "GET". Вы можете использовать команды, предоставленные в следующей таблице:

Команды

Описание

POST

Передать запрос на сервер, содержащий дополнительные данные. Это может быть, например, обращение к расширению CGI или ISAPI в котором ему передаются данные из формы, заполненной пользователем

GET

Запрос на получение объекта с сервера WWW

HEAD

Запрос на получение информации об объекте с сервера WWW. Сам объект не принимается

PUT

Записать данный объект на сервер по определенному адресу URL

LINK

Устанавливает связь между ресурсом, идентифцируемом адресом URL и другими ресурсами

DELETE

Предлагает серверу удалить ресурс по данному адресу URL

UNLINK

Удалляет связи ресурса с указанным адресом URL

¨     Отметим, что обычно используются только команды GET, HEAD и PUT


Во втором варианте метода OpenRequest параметр nVerb имеет целочисленный тип. В этом случае для задания команды вы должны использовать константы, представленные в следующей таблице.

Команда

Константа

POST

HTTP_VERB_POST

GET

HTTP_VERB_GET

HEAD

HTTP_VERB_HEAD

PUT

HTTP_VERB_PUT

LINK

HTTP_VERB_LINK

DELETE

HTTP_VERB_DELETE

UNLINK

HTTP_VERB_UNLINK

Эти константы определены в классе CHttpConnection следующим образом:

class CHttpConnection : public CInternetConnection

{

public:

   enum {

      _HTTP_VERB_MIN      = 0,

      HTTP_VERB_POST      = 0,

      HTTP_VERB_GET       = 1,

      HTTP_VERB_HEAD      = 2,

      HTTP_VERB_PUT       = 3,

      HTTP_VERB_LINK      = 4,

      HTTP_VERB_DELETE    = 5,

      HTTP_VERB_UNLINK    = 6,

      _HTTP_VERB_MAX      = 6,

   };

. . .

Объект, на который нацелена данная команда передается методу OpenRequest через параметр pstrObjectName. Он должен содержать указатель на строку с именем объекта, например именем файла, исполняемого модуля CGI, расширения ISAPI и т. д.

Все остальные параметры метода OpenRequest являются необязательными. Вы можете их не указывать, тогда для них будут использоваться значения, принятые по умолчанию.

Так, через параметр pstrReferer можно передать адрес URL объекта, из которого вы получили адрес запрашиваемого объекта. По умолчанию этот параметр равен NULL и соответствующий адрес не используется.

Параметр dwContext задает идентификатор контекста для данной операции запроса. Более подробно идентификатор контекста рассматривается в описании метода GetFile класса CFtpConnection.

С помощью параметра pstrAcceptTypes ваше приложение может сообщить серверу тип информации, который оно может воспринять. Например, приложение может принимать и обрабатывать только текстовый файлы, файлы изображений, и т. д.

Если вы не укажете параметр pstrAcceptTypes или запишете в него значение NULL, то сервер будет считать, что приложение способно работать только с текстовыми файлами типа "text/*".



Переменная pstrVersion содержит указатель на строку, в которой определяется версия HTTP, используемая вашим приложением. Если вы опустите этот параметр, то будет использоваться версия HTTP/1.0.

В качестве параметра dwFlags может использоваться один из флагов, определенных в следующей таблице. Они позволяют управлять загрузкой файлов из сети или из кэша.

Флаг

Описание

INTERNET_FLAG_RELOAD

Указывает на необходимость загрузки запрашиваемого объекта или информации непосредственно с сервера Internet, даже в том случае если данная информация уже содержится в кэше

INTERNET_FLAG_DONT_CACHE

Предупреждает запись полученной информации к кэш

INTERNET_FLAG_MAKE_PERSISTENT

Записывает полученную с сервера информацию в кэш и запрещает ее удаление во время операции очистки кэша

INTERNET_FLAG_SECURE

Использует семантику защищенных транзакций (secure transaction semantics)

INTERNET_FLAG_NO_AUTO_REDIRECT

Отменяет автоматическое перенаправление запросов методом SendRequest класса CHttpFile. Используется только в запросах по протоколу HTTP

Метод OpenRequest возвращает указатель на объект класса CHttpFile, соответствующий запрашиваемому объекту.


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