Wininet使用指南:如何搭建一个高效的HTTP服务器 (wininet http服务器)

Wininet是一个在Windows系统下提供网络连接的API。它可以用来实现网络协议,如HTTP, HTTPS, FTP, TP等。Wininet是一个非常强大的API,可以用来搭建高效的HTTP服务器。

本篇文章将会介绍如何使用Wininet API来搭建一个高效的HTTP服务器。

之一步:建立Socket连接

要建立服务器,首先需要建立Socket连接。Wininet域名解析使用内部的DNS解析器,并且在解析完成后将IP地址存储在名字缓存中。有关这些缓存的详细信息,请查阅MSDN文档。连接Socket有两个接口:InternetConnect和InternetOpenUrl。InternetConnect可以用来连接互联网服务器,而InternetOpenUrl可以用来访问网址。这两个接口都要求传递服务器信封。

第二步:使用HTTP协议

HTTP是Web服务器和客户端之间使用的协议。HTTP协议规定了两者之间的通信方式。HTTP服务器通过发送HTTP标头来告知客户端访问策略。客户端通过发送HTTP请求来告知服务器请求资源的方式。

Wininet API提供了四个接口来处理HTTP:

1. HttpOpenRequest() 调用此函数以准备从HTTP服务器检索数据(文档或文件)。

2. HttpSendRequest() 调用此函数以将请求发送到HTTP服务器。

3. HttpQueryInfo() 调用此函数以检索HTTP响应信息头。

4. HttpEndRequest() 调用此函数以结束HTTP请求过程。

所有这些函数都可以通过InternetConnect()函数的返回句柄进行调用。此函数返回打开的HTTP请求的句柄。

第三步:处理HTTP错误

在HTTP协议中,许多错误情况可以发生。这些错误可能包括服务器错误、客户端错误和网络错误等。以下是一些可以遇到的主要错误代码:

1xx 消息类:表示一般的信息。

2xx 成功:表示请求成功。

3xx 重定向:表示需要进一步操作才能完成请求。

4xx 客户端错误:表示客户端发送的请求有问题。

5xx 服务器错误:表示服务器无法完成请求。

要处理HTTP错误,可以调用InternetErrorDlg()函数。此函数将显示一个模态对话框,其中包含错误消息。

第四步:关闭请求

在HTTP请求处理完毕后,需要关闭请求。此操作可以通过调用HttpEndRequest()函数实现。此函数将结束HTTP请求过程,并关闭打开的服务器请求句柄。

第五步:关闭连接

当服务器请求处理完毕并成功关闭后,需要关闭连接。此操作可以通过调用InternetCloseHandle()函数实现。此函数将结束打开的连接句柄。

结论

通过使用Wininet API,我们可以轻松搭建高效的HTTP服务器。实现步骤包括建立Socket连接、使用HTTP协议、处理HTTP错误、关闭请求和关闭连接。Wininet API是一个非常强大的API,可用于实现网络协议,如HTTP、FTP、TP等。如果您正在考虑搭建 HTTP 服务器,那么 API 接口函数是您需要学习的重要内容之一。

相关问题拓展阅读:

求助,wininet post后HttpQueryInfo获取不到东西

错误情况是:未定义操作,请返回。 抓包看看你发出的数据备蔽,跟DZ注册发送的数据是否一样。此滚搜 有些系统的cookie,可森历以是通过页面的js生成的。一般dz肯定会有一个session来标识当前用户(不管是登陆还是未登录)。

如何通过使用 WinInet 模拟表单POST请求

为了正确模拟使用 WinInet 的表单提交,您需要发送标头指示正确的内容类型。对于表单,合适的的内容类型标头:

Content-Type: application/x-www-form-urlencoded

在许多情况下,如果未正确指定content-type内容,服务器将不响应。例如,IIS 3.0 的 Active Server Pages 组件实际检查专门为应用程序/x-www 的窗体-发此标头添加到”Request.Form”对象的窗体变量之前。此 MIME/内容的类型表示请誉睁求的数据的窗体变量编码的 URL 的列表。URL 编码意味着空格字符 (ASCII 32) 被编码为 +,特殊字符 (如!’ 以十六进制形式编码 %21。

下面是代码的使用 MFC WinInet 类模拟表单 POST 请求段:

CString strHeaders =

_T(“Content-Type: application/x-www-form-urlencoded”);

// URL-encoded form variables –

// name = “John Doe”, userid = “hithere”, other = “P&Q”

CString strFormData = _T(“name=John+Doe&userid=hithere&other=P%26Q”);

CInternetSession session;

CHttpConnection* pConnection =

session.GetHttpConnection(_T(“ServerNameHere”));

CHttpFile* pFile =

pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,

_T(“FormActionHere”));

BOOL result = pFile->SendRequest(strHeaders,

(LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());

如果不使用 MFC,相庆告岁同的代码会转换为直接的 SDK 调用,如下所示:

static TCHAR hdrs =

_T(“Content-Type: application/x-www-form-urlencoded”);

static TCHAR frmdata =

_T(“name=John+Doe&userid=hithere&other=P%26Q”);

static LPSTR accept={“*/*”, NULL};

// for clarity, error-checking has been removed

HINTERNET hSession = InternetOpen(“MyAgent”,

INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);

HINTERNET hConnect = InternetConnect(hSession, _T(“ServerNameHere”),

INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);

HINTERNET hRequest = HttpOpenRequest(hConnect, “POST”,

_T(“FormActionHere”), NULL, NULL, accept, 0, 1);

HttpSendRequest(hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata));

// close any valid internet-handles

回到顶端回到顶端 | 提供反友春馈

Collapse image参考

有关 URL 编码和格式的窗体 POST 请求的详细信息,请参阅 RFC.2 节。

回到顶端回到顶端 | 提供反馈

Collapse image属性

文章编号:最后修改: 2023年9月29日 – 修订: 1.0

这篇文章中的信息适用于:

Microsoft Foundation Class Library 4.2 当用于

Microsoft Visual C++ 4.2 企业版

Microsoft Visual C++ 5.0 企业版

Microsoft Visual C++ 5.0 专业版

关键字:

kbhowto kbprogramming kbmt KBKbMtzh

机器翻译

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版:

Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均”依样”提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

不再更新的 KB 内容免责声明

本文介绍那些 Microsoft 不再提供支持的产品。因此本文按“原样”提供,并且不再更新。

CString strHeaders = _T(“Content-Type: application/x-www-form-urlencoded”);

// URL-encoded form variables –

// name = “伏棚伏John Doe”, userid = “hithere”和腔, other = “P&Q”

CString strFormData = _T(“缺携name=John Doe&userid=hithere&other=P&Q”);

CInternetSession session;

CHttpConnection* pConnection = session.GetHttpConnection(_T(“ServerNameHere”));

CHttpFile* pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,_T(“FormActionHere”));

Unexpected error in WinInet HTTP Channel是什么意思

浏厅雹空扮瞎览器脱机了,把勾去肆绝掉就可以!

关于wininet http服务器的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Wininet使用指南:如何搭建一个高效的HTTP服务器 (wininet http服务器)