C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 CInternetSession / Классы. / Visual C++ .NET

CInternetSession

Это основной класс для работы с протоколами Интернет высокого уровня: HTTP, FTP, Gopher. Смысл данного класса заключается в создании сессии связи с некоторым сервером. Любое построение клиента, работающего с Интернет-ресурсами, должно содержать в начальной стадии создание объекта данного класса.

Название метод Назначение
CInternetSession Конструктор класса
EnableStatusCallback Метод разрешает или запрещает использование функции обратного вызова
OnStatusCallback Данная функция вызывается, когда происходит некоторое изменение в сеансе связи. Чтобы использовать её, вам придётся образовать класс, производный от CInternetSession, и затем переписать его
Close Метод закрывает текущий сеанс с Интернетом
SetOption Позволяет установить параметры сеанса связи
GetContect Позволяет получить идентификатор контекста текущего сеанса
GetFtpConnection Устанавливает сеанс связи с FTP-сервером
GetHttpConnection Устанавливает сеанс связи с Web-сервером
OpenURL Метод открывает Интернет-объект по заданному адресу. Метод открывает так же и локальные файлы.
QueryOption Запрос, позволяющий получить опции сеанса, которые в свою очередь могут быть установлены с помощью метода SetOption, прототип которого вполне аналогичен данному
ServiceTypeFromHandle Определяет тип сервиса по дескриптору
HINTERNET Содержит дескриптор данного сеанса
GetCookie Получает Cookie для данного URL
SetCookie Задаёт Cookie для определённого URL

Опишем некоторые методы более подробно.

Конструктор класса

CInternetSession
(
 LPCTSTR pstrAgent = NULL, 
 DWORD_PTR dwContext = 1, 
 DWORD dwAccessType = PRE_CONFIG_INTERNET_ACCESS, 
 LPCTSTR pstrProxyName = NULL, 
 LPCTSTR pstrProxyBypass = NULL, 
 DWORD dwFlags = 0
)

Как видим все параметры конструктора не обязательны и выбраны по умолчанию.
Первый параметр - определяет имя приложения, Создающего сеанс в Интернете.
Второй параметр - идентификатор контекста.
Третий параметр - тип доступа к сети. Вот значения этого параметра:

  • INTERNET_OPEN_TYPE_PRECONFIG - тип доступа, определён системой.
  • INTERNET_OPEN_TYPE__DIRECT - прямой тип доступа.
  • INTERNET_OPEN_TYPE_PROXY - доступ через proxy-сервер.

Четвёртый параметр - имя proxy-сервера.
Пятый параметр - строка со списком дополнительных proxy-серверов.
Шестой параметр - флаг. Этот параметр может так же принимать и такие значения:

  • INTERNET_FLAG_DONT_CACHE - данные, получаемые из Интернета, будут кэшироваться. При частом доступе к данным, данные могу браться из кэша.
  • INTERNET_FLAG_ASYNC - асинхронный режим работы.

Метод OpenURL. Как мы видим, метод при успешном завершении возвращает указатель на объект CStdioFile, который мы в дальнейшем можем использовать для доступа к объекту Интернета. При неудачном открытии возвращается NULL.

CStdioFile* OpenURL
(
 LPCTSTR pstrURL, 
 DWORD_PTR dwContext = 1, 
 DWORD dwFlags = INTERNET_FLAG_TRANSFER_ASCII, 
 LPCTSTR pstrHeaders = NULL, 
 DWORD dwHeadersLength = 0
 )

Первый параметр - адрес URL.
Второй параметр - идентификатор контекста, который может затем использоваться в функции обратного вызова.
Третий параметр может принимать следующие значения:

  • INTERNET_FLAG_RELOAD - получить данные из сети, даже если они содержатся в кэше.
  • INTERNET_FLAG_DONT_CACHE - не выполнять кэширование.
  • INTERNET_FLAG_SECURE - только для получения информации с HTTP.
  • INTERNET_OPEN_FLAG_EXISTING_CONNECT - определяет, что последующее использование данного метода будет обращаться к текущему соединению.
  • INTERNET_FLAG_PASSIVE - пассивное соединение с FTP-сервером.
  • INTERNET_FLAG_TRANSFER_ASCII - трактует передаваемый файл как файл в формате ASCII.
  • INTERNET_FLAG_TRANSFER_BINARY - трактует передаваемый файл как двоичный.

Четвертый параметр - дополнительный заголовок запроса.
Пятый параметр - длина дополнительного заголовка.

CFtpConnection* GetFtpConnection
(
 LPCTSTR pstrServer, 
 LPCTSTR pstrUserName = NULL, 
 LPCTSTR pstrPassvord = NUUL, 
 INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER, 
 BOOL bPassive = false
)

Метод осуществляет соединение с FTP-сервером. Возвращается указатель на объект класса CFtpConnection. После успешного соединения мы уже можем использовать возможности этого класса.
Первый параметр - адрес сервера FTP.
Второй параметр - имя соединения с сервером. Если параметр не задан, то используется имя anonymous.
Третий параметр - пароль соединения.
Четвёртый параметр - номер порта соединения. По умолчанию используется порт 21.
Пятый параметр - определяет режим соединения. Если параметр равен true, то осуществляется пассивное соединение.

CHttpConnection* GetHttpConnection
(
 LPCTSTR pstrServer, 
 INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER,
 LPCTSTR pstrUserName = NULL, 
 LPCTSTR pstrPassvord = NUUL, 
)

Метод осуществляет соединение с Web-сервером. Он очень похож на предыдущие, но, в отличии от него, не осуществляет непосредственное соединение с сервером.

Первый параметр - имя Web-сервера.
Второй параметр - номер порта. По умолчанию он равен 80.
Третий параметр - имя пользователя.
Четвёртый параметр - пароль доступа.

CInternetConnection

Создает Интернет-соединение и представляет средства управления этим соединением. Является базовым классом для классов CFtpConnection, CHttpConnection, CGonnection.

Конструктор класса

CInternetConnection
(
CInternetSession* pSession,
LPCTSTR pstrServer,
INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER,
DWORD_PTR dwContext = 1
)

Первый параметр - указатель на объект класса CInternetSession.
Второй параметр - имя сервера.
Третий параметр - номер порта.
Четвертый параметр - номер контекста.
DWORD_PTR GetContext() - получил номер контекста.
Cstring GetServerName() - Получил имя сервера.
CInternetSession* GetSession() - получить текущую сессию.
operator HINTERNET() - получил дескриптор текущей сессии.

CFtpConnection

Создает соединение с FTP-сервером и предоставляет средства управления эти соединением. Класс, производный от CInternetConnection. В таблице перечислены методы данного класса.

Название метод Назначение
CFtpConnection Конструктор класса. Обычно не используется
Command Послать команду непосредственно на FTP-сервер
CreateDirectory Создать каталог на FTP-сервере
GetCurrentDirectory Получить текущий каталог на FTP-сервере
GetCurrentDirectoryAsURL Получить текущий каталог в формате URL
GetFile Скопировать выбранный файл на FTP на локальный компьютер
PutFile Сохранить файл на FTP-сервере
OpenFile Открыть файл на FTP-сервере для чтения или записи. Таким образом, вы получаете большой контроль над процессом копирования. Метод возвращает указатель на объект класса CInternetFile. После этого вы можете использовать методы Read и Write этого класса для чтения и записи в открытый файл
Remove Удалить файл на FTP-сервере
RemoveDirectory Удалить каталог на FTP-сервере
Rename Переименовать файл на FTP-сервере
SetCurrentDirectory Установить текущий каталог

Как мы видим, методы класса CFtpConnhection позволяют управляться с FTP-сервером, ну почти так же, как с файловой системой на локальном компьютере.

CHttpConnection

Создает соединение с HTTP-сервером и предоставляет средства управления этим соединением. Класс является производным от CInternetConnection.

Класс, кроме конструктора, имеет еще только один метод OpenRequest, имеющий два возможных прототипа.

CHttpFile* OpenRequest
(
   LPCTSTR pstrVerb,
   LPCTSTR pstrObjectName,
   LPCTSTR pstrReferer = NNULL,
   DWORD_PTR dwContext = 1,
   LPCTSTR* ppstrAcceptTupes = NULL,
   LPCTSTR pstrVersion = NULL,
   DWORD dwFlags = INTERNET_FLAG_EXISTING_CONNECT
)
CHttpFile* OpenRequest
(
   int nVerb,
   LPCTSTR pstrObjectName,
   LPCTSTR pstrReferer = NULL,
   DWORD_PTR dwContext = 1,
   LPCTSTR* pstrAcceptTypes = NULL,
   LPCTSTR pstrVersion = NULL,
   DWORD dwFlags = INTERNET_FLAG_EXISTING_CONNECT
)

Обратите внимание, что оба метода отличаются только формой первого аргумента. И в том, и в другом случае он представляет собой команду, только в первом случае это строковый вариант команды, а во втором - код команды. Метод создает запрос, который затем будет отправлен на сервер. В таблице описаны значения первого параметра класса CHttpConnection.

Команда Код команды Описание
POST HTTP_VERB_POST Предаёт запрос на Web-сервер. В запросе могут содержаться дополнительные данные
GET HTTP_VERB_GET Запрос на получение информации с сервера
HEAD HTTP_VERB_HEAD Метод запрашивает только заголовок файла или ресурса
PUT HTTP_VERB_PUT Помещает тело содержимого запроса по указанному URL
LINK HTTP_VERB_LINK Связывает информацию заголовка с документом на сервере
DELETE HTTP_VERB_DELETE Удаляет данные по указанному URL(обычно это запрещено)
UNLINK HTTP_VERB_UNLINK Отменяет связь

Второй параметр - содержит имя объекта, на который нацелена данная команда. Это может быть файл, модуль CGI или ISAPI.
Третий параметр - может содержать адрес, откуда вы получили адрес запрашиваемого объекта.
Четвертый параметр - идентификатор контекста.
Пятый параметр - может содержать тип информации, которую хочет получить клиент.
Шестой параметр - содержит строку - версию HTTP.
Седьмой параметр - может содержать комбинацию следующих значений:

  • INTERNET_FLAG_RELOAD - указывает на загрузку информации непосредственно сервера;
  • INTERNET_FLAG_DONT_CACHE - предупреждает запись получаемой информации в кэше;
  • INTERNET_FLAG_MAKE_PERSISTENT - записывает полученную информацию в кэш и запрещает ее удаление;
  • INTERNET_FLAG_SECURE - использует семантику защищенных транзакций;
  • INTERNET_FLAG_TO_AUTO_REDIRECT - отменяет автоматическое перенаправление запросов.

CInternetFile

Представляет возможность удаленного доступа к Интернет-ресурсам. Данный класс является базовым для CHttpFile и CGopherFile. Отметим, что данный класс производный от CStdioFile.

Работая с MFC, вы можете осуществлять буферизацию при чтении и записи данных.

BOOL SetReadBufferSize(UINT nReadSize)
BOOL SetWriteBufferSize(UINT nWriteSize)

Virtual void Abort()
Virtual void Close()
Virtual void Flush()
Virtual ULONGLONG GetLength()
Virtual UINT Read
(
  void* IpBuf,
UINT nCount
)
Virtual BOOL ReadString
(
CString& rString
)
Virtual void Write
(
const void* IpBuf,
UINT nCount
)
Virtual void WriteString
(
LPCTSTR pstr
)

Метод Seek позволяет перемещать указатель в открытом файле.

Virtual ULONGLONG Seek
(
LONGLONG Ioffset,
UINT nFrom
)

Первый параметр - смещение в байтах.
Второй параметр - определяет, откуда вести отчет:
CFile:begin (от начала), CFile:current (от текущей позиции), CFile:end (от конца).