Функция WinHttpOpenRequest (winhttp.h)
Функция WinHttpOpenRequest создает дескриптор HTTP-запроса.
Синтаксис
WINHTTPAPI HINTERNET WinHttpOpenRequest(
[in] HINTERNET hConnect,
[in] LPCWSTR pwszVerb,
[in] LPCWSTR pwszObjectName,
[in] LPCWSTR pwszVersion,
[in] LPCWSTR pwszReferrer,
[in] LPCWSTR *ppwszAcceptTypes,
[in] DWORD dwFlags
);
Параметры
[in] hConnect
Дескриптор подключения HINTERNET к сеансу HTTP, возвращаемого WinHttpConnect.
[in] pwszVerb
Указатель на строку, содержащую HTTP-команду , используемую в запросе. Если этот параметр имеет значение NULL, функция использует GET в качестве HTTP-команды. Примечание Эта строка должна быть в верхнем регистре. Многие серверы обрабатывают HTTP-команды как чувствительные к регистру, а запросы примечаний (RFC) целевой группы интернет-инженеров (IETF) пишут эти команды только символами верхнего регистра.
[in] pwszObjectName
Указатель на строку, содержащую имя целевого ресурса указанной HTTP-команды. Обычно это имя файла, исполняемый модуль или описатель поиска.
[in] pwszVersion
Указатель на строку, содержащую версию HTTP. Если этот параметр имеет значение NULL, функция использует HTTP/1.1.
[in] pwszReferrer
Указатель на строку, указывающую URL-адрес документа, из которого был получен URL-адрес в запросе pwszObjectName . Если для этого параметра задано значение WINHTTP_NO_REFERER, ссылающийся документ не указан.
[in] ppwszAcceptTypes
Указатель на массив строковых указателей со значением NULL, указывающий типы мультимедиа, принимаемые клиентом. Если для этого параметра задано значение WINHTTP_DEFAULT_ACCEPT_TYPES, клиент не принимает типы. Как правило, серверы обрабатывают отсутствие принятых типов как признак того, что клиент принимает только документы типа "text/*"; то есть только текстовые документы — нет изображений или других двоичных файлов. Список допустимых типов мультимедиа см. в разделе Типы мультимедиа, определенные IANA по адресу http://www.iana.org/assignments/media-types/.
[in] dwFlags
Длинное целочисленное значение без знака, содержащее значения флага Интернета. Здесь могут содержаться одно или несколько значений из следующего списка:
Возвращаемое значение
Возвращает допустимый дескриптор HTTP-запроса в случае успешного выполнения или значение NULL , если нет. Чтобы получить дополнительные сведения об ошибке, вызовите Метод GetLastError. Среди возвращаемых кодов ошибок приведены следующие.
Код ошибки | Описание |
---|---|
|
Для этой операции указан неправильный тип дескриптора. |
|
Произошла внутренняя ошибка. |
|
Недопустимый URL-адрес. |
|
Операция была отменена, как правило, из-за того, что дескриптор, с которым работал запрос, был закрыт до завершения операции. |
|
URL-адрес указывает схему, отличаемую от "http:" или "https:". |
|
Недостаточно памяти для выполнения запрошенной операции. (Код ошибки Windows) |
Комментарии
Возвращаемое значение указывает на успех или сбой. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Функция WinHttpOpenRequest создает новый дескриптор HTTP-запроса и сохраняет указанные параметры в этом дескрипторе. Дескриптор HTTP-запроса содержит запрос для отправки на HTTP-сервер и содержит все заголовки RFC822/MIME/HTTP, отправляемые как часть запроса.
Если для pwszVerb задано значение "HEAD", заголовок Content-Length игнорируется.
Если функция обратного вызова состояния была установлена с winHttpSetStatusCallback, WINHTTP_CALLBACK_STATUS_HANDLE_CREATED уведомление указывает , что WinHttpOpenRequest создал дескриптор запроса.
После завершения работы вызывающего приложения с помощью дескриптора HINTERNET , возвращаемого WinHttpOpenRequest, его необходимо закрыть с помощью функции WinHttpCloseHandle .
Примеры
В этом примере показано, как получить дескриптор HINTERNET , открыть сеанс HTTP, создать заголовок запроса и отправить его на сервер.
BOOL bResults = FALSE;
HINTERNET hSession = NULL,
hConnect = NULL,
hRequest = NULL;
// Use WinHttpOpen to obtain a session handle.
hSession = WinHttpOpen( L"A WinHTTP Example Program/1.0",
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS, 0);
// Specify an HTTP server.
if (hSession)
hConnect = WinHttpConnect( hSession, L"www.wingtiptoys.com",
INTERNET_DEFAULT_HTTP_PORT, 0);
// Create an HTTP Request handle.
if (hConnect)
hRequest = WinHttpOpenRequest( hConnect, L"PUT",
L"/writetst.txt",
NULL, WINHTTP_NO_REFERER,
WINHTTP_DEFAULT_ACCEPT_TYPES,
0);
// Send a Request.
if (hRequest)
bResults = WinHttpSendRequest( hRequest,
WINHTTP_NO_ADDITIONAL_HEADERS,
0, WINHTTP_NO_REQUEST_DATA, 0,
0, 0);
// PLACE ADDITIONAL CODE HERE.
// Report any errors.
if (!bResults)
printf( "Error %d has occurred.\n", GetLastError());
// Close any open handles.
if (hRequest) WinHttpCloseHandle(hRequest);
if (hConnect) WinHttpCloseHandle(hConnect);
if (hSession) WinHttpCloseHandle(hSession);
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP, Windows 2000 Профессиональная с пакетом обновления 3 (SP3) [только классические приложения] |
Минимальная версия сервера | Windows Server 2003, Windows 2000 Server с пакетом обновления 3 (SP3) [только классические приложения] |
Целевая платформа | Windows |
Header | winhttp.h |
Библиотека | Winhttp.lib |
DLL | Winhttp.dll |
Распространяемые компоненты | WinHTTP 5.0 и Internet Обозреватель 5.01 или более поздней версии в Windows XP и Windows 2000. |