c http文件服务器,CHttpFile 类

CHttpFile 类

11/04/2016

本文内容

提供请求和读取 HTTP 服务器上文件的功能。

语法

class CHttpFile : public CInternetFile

成员

受保护的构造函数

公共方法

备注

如果 Internet 会话读取 HTTP 服务器中的数据,则必须创建的实例 CHttpFile 。

若要了解有关如何 CHttpFile 使用其他 MFC Internet 类的详细信息,请参阅文章 使用 WinInet 进行 Internet 编程。

继承层次结构

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);

parameters

pstrHeaders

指向字符串的指针,该字符串包含要追加到请求中的标头或标头。 每个标头必须以 CR/LF 对结尾。

dwFlags

修改新标头的语义。 可以是以下值之一:

HTTP_ADDREQ_FLAG_COALESCE 合并同名的标题,并使用标志来添加找到的第一个标头。 例如,"Accept: text/ * " 后跟 "accept: audio/ * " 会生成单个标头 "accept: text/ * ,audio/ * "。 这取决于调用应用程序,以确保与通过合并或单独标头发送的请求所收到的数据有关的统一方案。

HTTP_ADDREQ_FLAG_REPLACE 执行删除并添加来替换当前标头。 标头名称将用于删除当前标头,而完整值将用于添加新标头。 如果标头值为空并且找到了标头,则将其删除。 如果不为空,则替换标头值。

HTTP_ADDREQ_FLAG_ADD_IF_NEW 仅添加标头(如果尚未存在)。 如果存在错误,则返回一个错误。

与 REPLACE 一起使用的 HTTP_ADDREQ_FLAG_ADD。 如果标头不存在,则添加标头。

dwHeadersLen

PstrHeaders 的长度,以字符为字符。 如果这是-1L,则假定 pstrHeaders 为零终止,并计算长度。

str

对包含要添加的请求标头或标头的 CString 对象的引用。

返回值

如果成功,则不为 0;否则为 0。 如果调用失败,则可以调用 Win32 函数 GetLastError 来确定错误的原因。

备注

AddRequestHeaders 向 HTTP 请求句柄追加额外的自由格式标头。 它旨在供需要详细控制发送到 HTTP 服务器的准确请求的复杂客户端使用。

备注

应用程序可以使用 HTTP_ADDREQ_FLAG_ADD 或 HTTP_ADDREQ_FLAG_ADD_IF_NEW 在 pstrHeaders 或 str 中传递多个标头,以便 AddRequestHeaders 调用。 如果应用程序尝试使用 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);

parameters

hFile

Internet 文件的句柄。

hSession

Internet 会话的句柄。

pstrObject

指向包含对象的字符串的指针 CHttpFile 。

pstrServer

指向包含服务器名称的字符串的指针。

pstrVerb

指向字符串的指针,该字符串包含要在发送请求时使用的方法。 可以是 POST、HEAD 或 GET。

dwContext

对象的上下文标识符 CHttpFile 。 有关此参数的详细信息,请参阅 备注 。

pConnection

指向 CHttpConnection 对象的指针。

备注

MFC 将的默认值 dwContext CHttpFile 从创建对象的 CInternetSession 对象发送到对象 CHttpFile 。 当你调用 CInternetSession::OpenURL 或 CHttpConnection 来构造 CHttpFile 对象时,你可以重写默认值,以将上下文标识符设置为你选择的值。 上下文标识符返回到 CInternetSession:: OnStatusCallback ,以在标识它的对象上提供状态。 有关上下文标识符的详细信息,请参阅文章 Internet 优先步骤: WinInet 。

CHttpFile:: EndRequest

使用 SendRequestEx 成员函数调用此成员函数以结束发送到 HTTP 服务器的请求。

BOOL EndRequest(

DWORD dwFlags = 0,

LPINTERNET_BUFFERS lpBuffIn = NULL,

DWORD_PTR dwContext = 1);

parameters

dwFlags

描述操作的标志。 有关适当标志的列表,请参阅 Windows SDK 中的 HttpEndRequest 。

lpBuffIn

一个指针,指向用于描述用于操作的输入缓冲区的已初始化 INTERNET_BUFFERS 。

dwContext

操作的上下文标识符 CHttpFile 。 有关此参数的详细信息,请参阅备注。

返回值

如果成功,则不为 0;否则为 0。 如果调用失败,则通过检查引发的 CInternetException 对象来确定失败的原因。

备注

DwContext 的默认值由 MFC 发送到 CHttpFile 创建该对象的 CInternetSession对象中的对象 CHttpFile 。 调用 CInternetSession:: OpenURL 或 CHttpConnection 来构造 CHttpFile 对象时,可以重写默认值,将上下文标识符设置为所选的值。 上下文标识符返回到 CInternetSession:: OnStatusCallback ,以在标识它的对象上提供状态。 有关上下文标识符的详细信息,请参阅文章 Internet 优先步骤: WinInet 。

CHttpFile:: GetFileURL

调用此成员函数以获取作为 URL 的 HTTP 文件的名称。

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;

parameters

dwInfoLevel

要查询的属性和指定所请求的信息类型的下列标志的组合:

HTTP_QUERY_CUSTOM 查找标头名称,并在输出中的 lpvBuffer 中返回此值。 如果找不到标头,HTTP_QUERY_CUSTOM 将引发断言。

HTTP_QUERY_FLAG_REQUEST_HEADERS 通常情况下,应用程序将查询响应标头,但应用程序也可以使用此标志来查询请求标头。

HTTP_QUERY_FLAG_SYSTEMTIME 其值为日期/时间字符串的标头(如 "上次修改时间"),此标志会将标头值作为标准 Win32 SYSTEMTIME 结构返回,而不需要应用程序对数据进行分析。 如果使用此标志,则可能需要使用 SYSTEMTIME 函数的重写。

HTTP_QUERY_FLAG_NUMBER 其值为数字的标头(如状态代码),则此标志以32位数字的形式返回数据。

有关可能值的列表,请参阅 " 备注 " 部分。

lpvBuffer

指向接收信息的缓冲区的指针。

lpdwBufferLength

输入时,这将指向一个值,该值包含数据缓冲区的长度(以字符数或字节数表示)。 有关此参数的详细信息,请参阅 " 备注 " 部分。

lpdwIndex

指向从零开始的标头索引的指针。 可以为 NULL。 使用此标志可枚举多个具有相同名称的标头。 对于 input, lpdwIndex 指示要返回的指定标头的索引。 在输出时, lpdwIndex 指示下一标头的索引。 如果找不到下一个索引,则返回 ERROR_HTTP_HEADER_NOT_FOUND。

str

对接收返回信息的 CString 对象的引用。

dwIndex

索引值。 请参阅 lpdwIndex。

pSysTime

指向 Win32 SYSTEMTIME 结构的指针。

返回值

如果成功,则不为 0;否则为 0。 如果调用失败,则可以调用 Win32 函数 GetLastError 来确定错误的原因。

备注

只有在成功调用 SendRequest 或 CHttpFile OpenURL成功创建的对象之后,才能使用此成员函数。

可以从以下类型的数据中检索以下类型的数据 QueryInfo :

字符串 (默认值)

SYSTEMTIME ("Data:" "过期:" 等,标头)

用于 STATUS_CODE、CONTENT_LENGTH 等的 DWORD ()

将字符串写入缓冲区后,如果成员函数成功,则 lpdwBufferLength 包含以字符结尾的字符串长度(对于终止 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;

parameters

dwStatusCode

对状态代码的引用。 状态代码指示请求的事件是成功还是失败。 有关状态代码说明的选择,请参阅 " 备注 "。

返回值

如果成功,则不为 0;否则为 0。 如果调用失败,则可以调用 Win32 函数 GetLastError 来确定错误的原因。

备注

只有在成功调用 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);

parameters

pstrHeaders

指向字符串的指针,该字符串包含要发送的标头的名称。

dwHeadersLen

由 pstrHeaders 标识的标头的长度。

lpOptional

要在请求标头之后立即发送的任何可选数据。 这通常用于 POST 和 PUT 操作。 如果没有要发送的可选数据,则此值可以为 NULL。

dwOptionalLen

LpOptional 的长度。

strHeaders

一个字符串,其中包含要发送的请求的标头的名称。

返回值

如果成功,则不为 0;否则为 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);

parameters

dwTotalLen

要在请求中发送的字节数。

dwFlags

描述操作的标志。 有关适当标志的列表,请参阅 Windows SDK 中的 HttpSendRequestEx 。

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 优先步骤: WinInet 。

示例

此代码段将字符串的内容发送到 LOCALHOST 服务器上名为 MFCISAPI.DLL 的 DLL。 虽然此示例只使用一次调用 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();

请参阅

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值