Класс CHttpFile
Предоставляет функции для запроса и чтения файлов на HTTP-сервере.
Синтаксис
class CHttpFile : public CInternetFile
Участники
Защищенные конструкторы
Имя | Описание |
---|---|
CHttpFile::CHttpFile | Создает объект CHttpFile . |
Открытые методы
Имя | Описание |
---|---|
CHttpFile::AddRequestHeaders | Добавляет заголовки в запрос, отправленный на HTTP-сервер. |
CHttpFile::EndRequest | Завершает запрос, отправленный на HTTP-сервер с помощью функции-члена SendRequestEx . |
CHttpFile::GetFileURL | Возвращает URL-адрес указанного файла. |
CHttpFile::GetObject | Возвращает целевой объект команды в запросе на HTTP-сервер. |
CHttpFile::GetVerb | Возвращает команду, которая использовалась в запросе на HTTP-сервер. |
CHttpFile::QueryInfo | Возвращает заголовки ответа или запроса с HTTP-сервера. |
CHttpFile::QueryInfoStatusCode | Извлекает код состояния, связанный с HTTP-запросом, и помещает его в указанный dwStatusCode параметр. |
CHttpFile::SendRequest | Отправляет запрос на HTTP-сервер. |
CHttpFile::SendRequestEx | Отправляет запрос на HTTP-сервер с помощью методов Write или WriteString.CInternetFile |
Замечания
Если сеанс Интернета считывает данные с HTTP-сервера, необходимо создать экземпляр CHttpFile
.
Дополнительные сведения о CHttpFile
работе с другими классами Интернета MFC см. в статье "Интернет-программирование с помощью WinInet".
Иерархия наследования
CHttpFile
Требования
Заголовок: afxinet.h
CHttpFile::AddRequestHeaders
Вызовите эту функцию-член, чтобы добавить один или несколько заголовков HTTP-запросов в дескриптор HTTP-запроса.
BOOL AddRequestHeaders(
LPCTSTR pstrHeaders,
DWORD dwFlags = HTTP_ADDREQ_FLAG_ADD_IF_NEW,
int dwHeadersLen = -1);
BOOL AddRequestHeaders(
CString& str,
DWORD dwFlags = HTTP_ADDREQ_FLAG_ADD_IF_NEW);
Параметры
pstrHeaders
Указатель на строку, содержащую заголовок или заголовки, добавляемые к запросу. Каждый заголовок должен быть завершен парой CR/LF.
dwFlags
Изменяет семантику новых заголовков. Может применяться один из перечисленных ниже типов.
HTTP_ADDREQ_FLAG_COALESCE слиянием заголовков того же имени с помощью флага для добавления первого заголовка, найденного в последующий заголовок. Например, "Принять: текст/*", а затем "Принять: аудио/*" приводит к формированию одного заголовка "Accept: text/*, audio/*". Это относится к вызывающему приложению, чтобы обеспечить единую схему в отношении данных, полученных запросами, отправленными с объединенными или отдельными заголовками.
HTTP_ADDREQ_FLAG_REPLACE Выполняет удаление и добавление для замены текущего заголовка. Имя заголовка будет использоваться для удаления текущего заголовка, а полное значение будет использоваться для добавления нового заголовка. Если значение заголовка пусто, а заголовок найден, он удаляется. Если значение заголовка не пустое, заголовок заменяется.
HTTP_ADDREQ_FLAG_ADD_IF_NEW добавляет только заголовок, если он еще не существует. Если он существует, возвращается ошибка.
HTTP_ADDREQ_FLAG_ADD Используется с REPLACE. Добавляет заголовок, если он не существует.
dwHeadersLen
Длина в символах pstrHeaders. Если это значение равно -1L, то предполагается, что pstrHeaders будет нулевым и длина вычисляется.
str
Ссылка на объект CString , содержащий заголовок запроса или заголовки, которые необходимо добавить.
Возвращаемое значение
Имеет ненулевое значение в случае успешного выполнения, иначе — 0. Если вызов завершается ошибкой, можно вызвать функцию GetLastError Win32, чтобы определить причину ошибки.
Замечания
AddRequestHeaders
добавляет дополнительные заголовки свободного формата в дескриптор HTTP-запроса. Он предназначен для использования сложными клиентами, которым требуется подробный контроль над точным запросом, отправленным на HTTP-сервер.
Примечание.
Приложение может передавать несколько заголовков в pstrHeaders или str для AddRequestHeaders
вызова с помощью HTTP_ADDREQ_FLAG_ADD или HTTP_ADDREQ_FLAG_ADD_IF_NEW. Если приложение пытается удалить или заменить заголовок с помощью HTTP_ADDREQ_FLAG_REMOVE или HTTP_ADDREQ_FLAG_REPLACE, в lpszHeaders можно предоставить только один заголовок.
CHttpFile::CHttpFile
Эта функция-член вызывается для создания CHttpFile
объекта.
CHttpFile(
HINTERNET hFile,
HINTERNET hSession,
LPCTSTR pstrObject,
LPCTSTR pstrServer,
LPCTSTR pstrVerb,
DWORD_PTR dwContext);
CHttpFile(
HINTERNET hFile,
LPCTSTR pstrVerb,
LPCTSTR pstrObject,
CHttpConnection* pConnection);
Параметры
hFile
Дескриптор к интернет-файлу.
hSession
Дескриптор сеанса Интернета.
pstrObject
Указатель на строку, CHttpFile
содержащую объект.
pstrServer
Указатель на строку, содержащую имя сервера.
pstrVerb
Указатель на строку, содержащую метод, используемый при отправке запроса. Может быть POST, HEAD или GET.
dwContext
Идентификатор контекста CHttpFile
для объекта. Дополнительные сведения об этом параметре см . в примечаниях .
pConnection
Указатель на объект CHttpConnection .
Замечания
Объект никогда не создается напрямую CHttpFile
; вместо этого следует вызывать CInternetSession::OpenURL или CHttpConnection::OpenRequest .
Значение dwContext
по умолчанию отправляется MFC CHttpFile
объекту из объекта CInternetSession , создавшего CHttpFile
объект. При вызове CInternetSession::OpenURL
или CHttpConnection
создании CHttpFile
объекта можно переопределить значение по умолчанию, чтобы задать идентификатор контекста для выбранного значения. Идентификатор контекста возвращается в CInternetSession::OnStatusCallback , чтобы предоставить состояние объекта, с которым он определен. Дополнительные сведения об идентификаторе контекста см. в статье Internet First Steps: WinInet .
CHttpFile::EndRequest
Вызовите эту функцию-член, чтобы завершить запрос, отправленный на HTTP-сервер с функцией члена SendRequestEx .
BOOL EndRequest(
DWORD dwFlags = 0,
LPINTERNET_BUFFERS lpBuffIn = NULL,
DWORD_PTR dwContext = 1);
Параметры
dwFlags
Флаги, описывающие операцию. Список соответствующих флагов см. в разделе HttpEndRequest в пакете SDK для Windows.
lpBuffIn
Указатель на инициализированную INTERNET_BUFFERS , описывающую входной буфер, используемый для операции.
dwContext
Идентификатор контекста CHttpFile
для операции. Дополнительные сведения об этом параметре см. в примечаниях.
Возвращаемое значение
Имеет ненулевое значение в случае успешного выполнения, иначе — 0. Если вызов завершается ошибкой, определите причину сбоя, проверив создаваемый объект CInternetException .
Замечания
Значение по умолчанию для dwContext отправляется MFC CHttpFile
объекту из объекта CInternetSession , создавшего CHttpFile
объект. При вызове CInternetSession::OpenURL или CHttpConnection для создания CHttpFile
объекта можно переопределить значение по умолчанию, чтобы задать идентификатор контекста для выбранного значения. Идентификатор контекста возвращается в CInternetSession::OnStatusCallback , чтобы предоставить состояние объекта, с которым он определен. Дополнительные сведения об идентификаторе контекста см. в статье Internet First Steps: WinInet .
CHttpFile::GetFileURL
Вызовите эту функцию-член, чтобы получить имя HTTP-файла в качестве URL-адреса.
virtual CString GetFileURL() const;
Возвращаемое значение
Объект CString, содержащий URL-адрес, ссылающийся на ресурс, связанный с этим файлом.
Замечания
Используйте эту функцию-член только после успешного вызова SendRequest или объекта, успешно созданного CHttpFile
OpenURL.
CHttpFile::GetObject
Вызовите эту функцию-член, чтобы получить имя объекта, связанного с этим CHttpFile
.
CString GetObject() const;
Возвращаемое значение
Объект CString , содержащий имя объекта.
Замечания
Используйте эту функцию-член только после успешного вызова SendRequest или объекта, успешно созданного CHttpFile
OpenURL.
CHttpFile::GetVerb
Вызовите эту функцию-член, чтобы получить http-команду (или метод), связанную с этим CHttpFile
.
CString GetVerb() const;
Возвращаемое значение
Объект CString, содержащий имя HTTP-команды (или метода).
Замечания
Используйте эту функцию-член только после успешного вызова SendRequest или объекта, успешно созданного CHttpFile
OpenURL.
CHttpFile::QueryInfo
Вызовите эту функцию-член, чтобы вернуть ответ или заголовок запроса из HTTP-запроса.
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;
Параметры
dwInfoLevel
Сочетание атрибута для запроса и следующих флагов, указывающих тип запрошенной информации:
HTTP_QUERY_CUSTOM Находит имя заголовка и возвращает это значение в lpvBuffer в выходных данных. HTTP_QUERY_CUSTOM выдает утверждение, если заголовок не найден.
HTTP_QUERY_FLAG_REQUEST_HEADERS Как правило, приложение запрашивает заголовки ответа, но приложение также может запрашивать заголовки запросов с помощью этого флага.
HTTP_QUERY_FLAG_SYSTEMTIME Для этих заголовков, значение которых является строкой даты и времени, например "Last-Modified-Time", этот флаг возвращает значение заголовка в виде стандартной структуры Win32 SYSTEMTIME , которая не требует анализа данных приложением. При использовании этого флага может потребоваться использовать
SYSTEMTIME
переопределение функции.HTTP_QUERY_FLAG_NUMBER Для этих заголовков, значение которого равно числу, например коду состояния, этот флаг возвращает данные в виде 32-разрядного числа.
Список возможных значений см. в разделе "Примечания".
lpvBuffer
Указатель на буфер, который получает сведения.
lpdwBufferLength
При входе это значение указывает на значение, содержащее длину буфера данных, в количестве символов или байтов. Дополнительные сведения об этом параметре см. в разделе "Примечания".
lpdwIndex
Указатель на индекс заголовка на основе нуля. Может иметь значение NULL. Используйте этот флаг для перечисления нескольких заголовков с одинаковым именем. Во входных данных lpdwIndex указывает индекс указанного заголовка для возврата. В выходных данных lpdwIndex указывает индекс следующего заголовка. Если следующий индекс не найден, возвращается ERROR_HTTP_HEADER_NOT_FOUND.
str
Ссылка на объект CString, получающий возвращаемые сведения.
dwIndex
Значение индекса. См . lpdwIndex.
pSysTime
Указатель на структуру Win32 SYSTEMTIME .
Возвращаемое значение
Имеет ненулевое значение в случае успешного выполнения, иначе — 0. Если вызов завершается ошибкой, можно вызвать функцию GetLastError Win32, чтобы определить причину ошибки.
Замечания
Используйте эту функцию-член только после успешного вызова SendRequest или объекта, успешно созданного CHttpFile
OpenURL.
Вы можете получить следующие типы данных из QueryInfo
:
строки (по умолчанию)
SYSTEMTIME
(для параметра Data:" "Срок действия:" и т. д., заголовки)DWORD (для STATUS_CODE, CONTENT_LENGTH и т. д.)
Когда строка записывается в буфер, а функция-член завершается успешно, lpdwBufferLength
содержит длину строки в символах минус 1 для завершающего символа NULL.
Возможные значения dwInfoLevel включают:
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
CHttpFile::QueryInfoStatusCode
Вызовите эту функцию-член, чтобы получить код состояния, связанный с HTTP-запросом, и поместить его в предоставленный параметр dwStatusCode .
BOOL QueryInfoStatusCode(DWORD& dwStatusCode) const;
Параметры
dwStatusCode
Ссылка на код состояния. Коды состояния указывают на успешность или сбой запрошенного события. См . примечания для выбора описания кода состояния.
Возвращаемое значение
Имеет ненулевое значение в случае успешного выполнения, иначе — 0. Если вызов завершается ошибкой, можно вызвать функцию GetLastError Win32, чтобы определить причину ошибки.
Замечания
Используйте эту функцию-член только после успешного вызова SendRequest или объекта, успешно созданного CHttpFile
OpenURL.
Коды состояния HTTP попадают в группы, указывающие на успешность или сбой запроса. В следующих таблицах описаны группы кода состояния и наиболее распространенные коды состояния HTTP.
Групповой | Значение |
---|---|
200–299 | Удачное завершение |
300–399 | Информация |
400-499 | Ошибка запроса |
500-599 | Ошибка сервера |
Распространенные коды состояния HTTP:
Код состояния | Значение |
---|---|
200 | URL-адрес расположен, передача следует |
400 | Неразборчивый запрос |
404 | Запрошенный URL-адрес не найден |
405 | Сервер не поддерживает запрошенный метод |
500 | Ошибка неизвестного сервера |
503 | Достигнута емкость сервера |
CHttpFile::SendRequest
Вызовите эту функцию-член, чтобы отправить запрос на HTTP-сервер.
BOOL SendRequest(
LPCTSTR pstrHeaders = NULL,
DWORD dwHeadersLen = 0,
LPVOID lpOptional = NULL,
DWORD dwOptionalLen = 0);
BOOL SendRequest(
CString& strHeaders,
LPVOID lpOptional = NULL,
DWORD dwOptionalLen = 0);
Параметры
pstrHeaders
Указатель на строку, содержащую имя заголовков для отправки.
dwHeadersLen
Длина заголовков, определяемых pstrHeaders.
lpOptional
Любые необязательные данные, отправляемые сразу после заголовков запроса. Обычно это используется для операций POST и PUT. Это может быть NULL, если для отправки необязательных данных нет.
dwOptionalLen
Длина lpOptional.
strHeaders
Строка, содержащая имя заголовков для отправленного запроса.
Возвращаемое значение
Имеет ненулевое значение в случае успешного выполнения, иначе — 0. Если вызов завершается ошибкой, определите причину сбоя, проверив создаваемый объект CInternetException .
CHttpFile::SendRequestEx
Вызовите эту функцию-член, чтобы отправить запрос на HTTP-сервер.
BOOL SendRequestEx(
DWORD dwTotalLen,
DWORD dwFlags = HSR_INITIATE,
DWORD_PTR dwContext = 1);
BOOL SendRequestEx(
LPINTERNET_BUFFERS lpBuffIn,
LPINTERNET_BUFFERS lpBuffOut,
DWORD dwFlags = HSR_INITIATE,
DWORD_PTR dwContext = 1);
Параметры
dwTotalLen
Количество байтов, отправляемых в запросе.
dwFlags
Флаги, описывающие операцию. Список соответствующих флагов см. в разделе HttpSendRequestEx в пакете SDK для Windows.
dwContext
Идентификатор контекста CHttpFile
для операции. Дополнительные сведения об этом параметре см. в примечаниях.
lpBuffIn
Указатель на инициализированную INTERNET_BUFFERS , описывающую входной буфер, используемый для операции.
lpBuffOut
Указатель на инициализированную INTERNET_BUFFERS, описывающую выходной буфер, используемый для операции.
Возвращаемое значение
Ненулевое значение в случае успешного выполнения. Если вызов завершается ошибкой, определите причину сбоя, проверив создаваемый объект CInternetException .
Замечания
Эта функция позволяет приложению отправлять данные с помощью методов Write и WriteString.CInternetFile
Перед вызовом переопределения этой функции необходимо знать длину передаваемых данных. Первый переопределение позволяет указать длину данных, которые вы хотите отправить. Второй переопределение принимает указатели на INTERNET_BUFFERS структуры, которые можно использовать для подробного описания буфера.
После записи содержимого в файл вызовите EndRequest , чтобы завершить операцию.
Значение по умолчанию для dwContext отправляется MFC CHttpFile
объекту из объекта CInternetSession , создавшего CHttpFile
объект. При вызове CInternetSession::OpenURL или CHttpConnection для создания CHttpFile
объекта можно переопределить значение по умолчанию, чтобы задать идентификатор контекста для выбранного значения. Идентификатор контекста возвращается в CInternetSession::OnStatusCallback , чтобы предоставить состояние объекта, с которым он определен. Дополнительные сведения об идентификаторе контекста см. в статье Internet First Steps: WinInet .
Пример
Этот фрагмент кода отправляет содержимое строки в библиотеку DLL с именем MFCISAPI.DLL на сервере LOCALHOST. Хотя в этом примере используется только один вызов WriteString
, использование нескольких вызовов для отправки данных в блоках приемлемо.
CString strData = _T("Some very long data to be POSTed here!");
pServer = session.GetHttpConnection(_T("localhost"));
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,
_T("/MFCISAPI/MFCISAPI.dll?"));
pFile->SendRequestEx(strData.GetLength());
pFile->WriteString(strData);
pFile->EndRequest();
См. также
Класс CInternetFile
Диаграмма иерархии
Класс CInternetFile
Класс CGopherFile
Класс CHttpConnection