HttpOpenRequestA 函数 (wininet.h)

创建 HTTP 请求句柄。

语法

HINTERNET HttpOpenRequestA(
  [in] HINTERNET hConnect,
  [in] LPCSTR    lpszVerb,
  [in] LPCSTR    lpszObjectName,
  [in] LPCSTR    lpszVersion,
  [in] LPCSTR    lpszReferrer,
  [in] LPCSTR    *lplpszAcceptTypes,
  [in] DWORD     dwFlags,
  [in] DWORD_PTR dwContext
);

参数

[in] hConnect

InternetConnect 返回的 HTTP 会话的句柄。

[in] lpszVerb

指向以 null 结尾的字符串的指针,该字符串包含要用于请求的 HTTP 谓词。 如果此参数为 NULL,则该函数使用 GET 作为 HTTP 谓词。

[in] lpszObjectName

指向以 null 结尾的字符串的指针,该字符串包含指定 HTTP 谓词的目标对象的名称。 这通常是文件名、可执行模块或搜索说明符。

[in] lpszVersion

指向以 null 结尾的字符串的指针,该字符串包含要用于请求的 HTTP 版本。 Internet Explorer 中的设置将替代此参数中指定的值。

如果此参数为 NULL,则该函数使用 HTTP 版本 1.1 或 1.0,具体取决于 Internet Explorer 设置的值。

含义
HTTP/1.0
HTTP 版本 1.0
HTTP/1.1
HTTP 版本 1.1

[in] lpszReferrer

指向 以 null 结尾的字符串的指针,该字符串指定从中获取请求 (lpszObjectName) URL 的文档的 URL。 如果此参数为 NULL,则不指定任何引用网站。

[in] lplpszAcceptTypes

指向以 null 结尾的字符串数组的指针,该数组指示客户端接受的媒体类型。 示例如下。

PCTSTR rgpszAcceptTypes[] = {_T("text/*"), NULL};

未能使用 NULL 指针正确终止数组将导致崩溃。

如果此参数为 NULL,则客户端不会接受任何类型。 服务器通常解释为缺少接受类型,以指示客户端仅接受类型为“text/*”的文档, (即仅接受文本文档(不) 图片或其他二进制文件)。

[in] dwFlags

Internet 选项。 此参数可以是以下任何值。

含义
INTERNET_FLAG_CACHE_IF_NET_FAIL
如果资源的网络请求因ERROR_INTERNET_CONNECTION_RESET (与服务器的连接已重置) 或ERROR_INTERNET_CANNOT_CONNECT (尝试连接到服务器失败) 失败而失败,则从缓存中返回资源。
INTERNET_FLAG_HYPERLINK
在确定是否从网络重新加载项目时,如果没有“过期时间”且服务器未返回 LastModified 时间,则强制重新加载。
INTERNET_FLAG_IGNORE_CERT_CN_INVALID
禁用根据请求中提供的主机名检查从服务器返回的基于 SSL/PCT 的证书。 WinINet 函数通过比较匹配的主机名和简单的通配符规则,对证书使用简单的检查。
INTERNET_FLAG_IGNORE_CERT_DATE_INVALID
禁用检查基于 SSL/PCT 的证书是否正确有效日期。
INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP
禁用此特殊类型的重定向检测。 使用此标志时,WinINet 函数以透明方式允许从 HTTPS 重定向到 HTTP URL。
INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS
禁用此特殊类型的重定向检测。 使用此标志时,WinINet 函数以透明方式允许从 HTTP 重定向到 HTTPS URL。
INTERNET_FLAG_KEEP_CONNECTION
使用保持连接语义(如果可用)。 Microsoft Network (MSN) 、NT LAN Manager (NTLM) 和其他类型的身份验证都需要此标志。
INTERNET_FLAG_NEED_FILE
如果无法缓存文件,则会导致创建临时文件。
INTERNET_FLAG_NO_AUTH
不会自动尝试身份验证。
INTERNET_FLAG_NO_AUTO_REDIRECT
不自动处理 HttpSendRequest 中的重定向。
INTERNET_FLAG_NO_CACHE_WRITE
不将返回的实体添加到缓存。
INTERNET_FLAG_NO_COOKIES
不会自动向请求添加 Cookie 标头,也不会自动将返回的 Cookie 添加到 Cookie 数据库。
INTERNET_FLAG_NO_UI
禁用 Cookie 对话框。
INTERNET_FLAG_PRAGMA_NOCACHE
强制源服务器解析请求,即使代理上存在缓存副本也是如此。
INTERNET_FLAG_RELOAD
强制从源服务器下载请求的文件、对象或目录列表,而不是从缓存下载。
INTERNET_FLAG_RESYNCHRONIZE
如果资源自上次下载以来已修改,则重新加载 HTTP 资源。 将重新加载所有 FTP 资源。

Windows XP 和 Windows Server 2003 R2 及更早版本: Gopher 资源也会重新加载。

INTERNET_FLAG_SECURE
使用安全事务语义。 这相当于使用安全套接字层/专用通信技术 (SSL/PCT) ,仅在 HTTP 请求中有意义。

[in] dwContext

指向变量的指针,该变量包含将此操作与任何应用程序数据关联的应用程序定义值。

返回值

如果成功,则返回 HTTP 请求句柄,否则返回 NULL 。 若要检索扩展的错误信息,请调用 GetLastError

注解

HttpOpenRequest 函数创建新的 HTTP 请求句柄,并将指定的参数存储在该句柄中。 HTTP 请求句柄保存要发送到 HTTP 服务器的请求,并包含要作为请求的一部分发送的所有 RFC822/MIME/HTTP 标头。

如果指定了“GET”或“POST”以外的谓词, HttpOpenRequest 会自动为请求设置INTERNET_FLAG_NO_CACHE_WRITE和INTERNET_FLAG_RELOAD。

在 Microsoft Internet Explorer 5 及更高版本中,如果 lpszVerb 设置为“HEAD”,则来自 HTTP/1.1 服务器的响应将忽略 Content-Length 标头。

在 Windows 7、Windows Server 2008 R2 及更高版本上, lpszVersion 参数被 Internet Explorer 设置覆盖。 EnableHttp1_1HKLM\Software\Microsoft\InternetExplorer\AdvacnedOptions\HTTP\GENABLE 下的注册表值,由 Internet Explorer 中为系统设置的 Internet 选项控制。 EnableHttp1_1值默认为 1。 如果 httpOpenRequest 函数将低于 1.1 的任何 HTTP 版本升级到 HTTP 版本 1.1(如果 EnableHttp1_1 设置为 1)。

调用应用程序使用 HttpOpenRequest 返回的 HINTERNET 句柄后,必须使用 InternetCloseHandle 函数将其关闭。

注意当以异步模式发送请求时, (InternetOpendwFlags 参数指定INTERNET_FLAG_ASYNC) ,而 dwContext 参数为零 (INTERNET_NO_CALLBACK) 时,将不会调用在请求句柄上使用 InternetSetStatusCallback 设置的回调函数,但调用仍将在异步模式下执行。

与 WinINet API 的所有其他方面一样,无法从 DllMain 或全局对象的构造函数和析构函数中安全地调用此函数。

注意 WinINet 不支持服务器实现。 此外,不应从服务使用它。 对于服务器实现或服务,请使用 Microsoft Windows HTTP Services (WinHTTP)
 

注意

wininet.h 标头将 HttpOpenRequest 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 wininet.h
Library Wininet.lib
DLL Wininet.dll

另请参阅

HTTP 会话

WinINet 函数