WinHttpOpenRequest 函数创建 HTTP 请求句柄。
Syntax
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
与 WinHttpConnect 返回的 HTTP 会话的 HINTERNET 连接句柄。
[in] pwszVerb
指向包含请求中使用的 HTTP 谓词 的字符串的指针。 如果此参数为 NULL,则该函数使用 GET 作为 HTTP 谓词。 注意 此字符串应全部大写。 许多服务器将 HTTP 谓词视为区分大小写,并且仅使用大写字符对注释(RFC)的 Internet 工程工作队(IETF)请求对这些谓词进行拼写。
[in] pwszObjectName
指向包含指定 HTTP 谓词的目标资源名称的 null 终止字符串的指针。 这通常是文件名、可执行模块或搜索说明符。
[in] pwszVersion
指向包含 HTTP 版本的字符串的指针。 如果此参数为 NULL,则该函数使用 HTTP/1.1。
[in] pwszReferrer
指向一个字符串的指针,该字符串指定从中获取请求 pwszObjectName 中的 URL 的文档的 URL。 如果此参数设置为 WINHTTP_NO_REFERER,则未指定引用文档。
[in] ppwszAcceptTypes
指向字符串指针的 null 终止数组的指针的指针,该数组指定客户端接受的媒体类型。 如果此参数设置为 WINHTTP_DEFAULT_ACCEPT_TYPES,则客户端不接受任何类型。 通常,服务器处理缺少接受的类型,指示客户端仅接受类型为“text/*”的文档;即,仅文本文档 - 没有图片或其他二进制文件。 有关有效媒体类型的列表,请参阅 IANA 在以下位置 http://www.iana.org/assignments/media-types/定义的媒体类型。
[in] dwFlags
包含 Internet 标志值的无符号长整数值。 这可以是以下一个或多个值:
返回值
如果成功,则返回有效的 HTTP 请求句柄;否则返回 NULL 。 有关扩展错误信息,请调用 GetLastError。 返回的错误代码如下。
| 错误代码 | Description |
|---|---|
|
为此作提供的句柄类型不正确。 |
|
发生了内部错误。 |
|
URL 无效。 |
|
该作已取消,通常是因为作完成之前请求已关闭的句柄。 |
|
URL 指定了除“http:”或“https:”以外的方案。 |
|
没有足够的内存可用于完成请求的作。 (Windows 错误代码) |
注解
返回值指示成功或失败。 若要获取扩展的错误信息,请调用 GetLastError。
WinHttpOpenRequest 函数创建新的 HTTP 请求句柄,并将指定的参数存储在该句柄中。 HTTP 请求句柄保存要发送到 HTTP 服务器的请求,并包含作为请求的一部分发送的所有 RFC822/MIME/HTTP 标头。
如果 pwszVerb 设置为“HEAD”,则忽略 Content-Length 标头。
如果使用 WinHttpSetStatusCallback 安装了状态回调函数,则 WINHTTP_CALLBACK_STATUS_HANDLE_CREATED 通知指示 WinHttpOpenRequest 已创建请求句柄。
调用应用程序使用 WinHttpOpenRequest 返回的 HINTERNET 句柄完成后,必须使用 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);
要求
| Requirement | 价值 |
|---|---|
| 最低支持的客户端 | 具有 SP3 的 Windows XP、Windows 2000 Professional [仅限桌面应用] |
| 支持的最低服务器 | Windows Server 2003、带 SP3 的 Windows 2000 Server [仅限桌面应用] |
| 目标平台 | Windows操作系统 |
| Header | winhttp.h |
| Library | Winhttp.lib |
| DLL | Winhttp.dll |
| 可再发行组件 | Windows XP 和 Windows 2000 上的 WinHTTP 5.0 和 Internet Explorer 5.01 或更高版本。 |