CHttpFile

調用該成員函式,用來對HTTP請求操作添加一個或多個請求頭。AddRequestHeaders 增加附加的、形式自由的頭到HTTP請求操作中。其往往被高級客戶使用,他們需要對發往HTTP伺服器的指定的請求進行具體控制。

CHttpFile

提供向HTTP伺服器中請求和讀取的功能。

如果Internet會話要從一個HTTP伺服器中讀取數據,則必須構造一個CHttpFile實例。

#include <afxinet.h>

CHttpFile類的成員

CHttpFile::AddRequestHeaders

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

返回值:

如果成功,則返回非零值,否則為0。如果該調用失敗,Win32的函式GetLastError 會被調用,確定失敗的原因。

說明:

注意:

對於使用HTTP_ADDREQ_FLAG_ADD或者HTTP_ADDREQ_FLAG_ADD_IF_NEW對AddRequestHeaders的調用,套用可在pstrHeaders 或str中,一次傳遞多個頭。如果套用試圖使用HTTP_ADDREQ_FLAG_REMOVE或HTTP_ADDREQ _FLAG_REPLACE來移動或替換一個頭,則lpszHeaders中只能提供一個頭。

CHttpFile::CHttpFile

CHttpFile( HINTERNET hFile, HINTERNET hSession, LPCTSTR pstrObject, LPCTSTR pstrServer, LPCTSTR pstrVerb, DWORD dwContext );

CHttpFile( HINTERNET hFile, LPCTSTR pstrVerb, LPCTSTR pstrObject, CHttpConnection* pConnection );

說明:

調用該成員函式來構造一個CHttpFile對象。

不能直接構造一個CHttpFile對象,但可以調用CInternetSession::OpenURL 或CHttpConnection::OpenRequest。

CHttpFile::Close

virtual void Close( );

說明:

關閉CHttpFile 並釋放其資源。只有在對SendRequest的成功調用或者一個CHttpFile對象被 OpenURL成功創建後,才能使用該成員函式。

CHttpFile::EndRequest

BOOL EndRequest(DWORD dwFlags = 0, LPINTERNET_BUFFERS lpBuffln = NULL, DWORD dwContext = 1);

throw(CInternetException);

說明:

調用此成員函式來結束用成員函式傳送HTTP伺服器的請求。

返回值:

一個CString對象,包含一個參照與本檔案相關聯資源的URL。

說明:

調用該成員函式,得到以URL表示的HTTP檔案的名字。

CHttpFile::GetObject

CString GetObject( ) const;

返回值:一個包含對象名稱的CString對象。

說明:

調用該成員函式以了解與此CHttpFile相關聯的對象名稱。

CHttpFile::GetVerb

CString GetVerb( ) const;

返回值:一個包含HTTP動詞名的CString對象。

調用該成員函式以了解與此CHttpFile相關聯的HTTP動詞。

CHttpFile::QueryInfo

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;

調用此成員函式返回HTTP請求中的回答或請求頭。只有在SendRequest被成功調用或者一個CHttpFile對象被 OpenURL成功創建後,才能使用該成員函式。

你可從QueryInfo中獲取以下數據類型:

當一個字元串被寫入緩衝區,且成員函式成功時,lpdwBufferLength 包含字元串的位元組長減一,去掉結束NULL字元的長度。

可能的dwInfoLevel值包括:

CHttpFile::QueryInfoStatusCode

BOOL QueryInfoStatusCode( DWORD& dwStatusCode ) const;

調用此成員函式以獲得HTTP請求相關聯的狀態號並將其放到所提供的dwStatusCode 參數中。

分組的HTTP 狀態號標識請求的成功或失敗。以下列表列出了狀態號組及大部分常用狀態號。

分組 含義
200-299 成功
300-399 信息
400-499 請求錯誤
500-599 伺服器錯誤

常用的HTTP狀態號:

狀態號 含義
200 URL定位,接著傳輸
400 不可理解的請求
404 所請求的URL未找到
405 伺服器不支持所請求的方法
500 未知的伺服器錯誤
503 已達到伺服器容量

CHttpFile::SendRequest

BOOL SendRequest( LPCTSTR pstrHeaders = NULL, DWORD dwHeadersLen = 0, LPVOID lpOptional = NULL, DWORD dwOptionalLen= 0 );

throw(CInternetException);

BOOL SendRequest( CString& strHeaders, LPVOID lpOptional = NULL, DWORD dwOptionalLen = 0 );

throw(CInternetException);

參數:

說明:調用此成員函式以向HTTP伺服器傳送請求。

CHttpFile::SendRequestEx

BOOL SendRequestEx(DWORD dwTotalLen, DWORD dwFlags = HSR_INITIATE, DWORD dwContext = 1);

throw(CInternetException);

BOOL SendRequestEx(LPINTERNET_BUFFERS lpBuffIn, LPINTERNET_BUFFERS lpBuffOut, DWORD dwFlags = HSR_INITIATE, DWORD dwContext = 1);

throw(CInternetException);

返回值:

如果成功,則返回非零值,否則為0。如果此調用失敗,可通過檢查產生的CInternetException對象來確定錯誤原因。

參數:

說明:

調用此成員函式來向一個HTTP 伺服器傳送請求。此函式允許套用使用CInternetFile的Write和WriteString 來傳送數據。在調用任一此函式的覆蓋前,必須知道傳送的數據長度。第一個覆蓋允許確定你要傳送的數據長度。第二個覆蓋接收指向INTERNET_BUFFERS結構的指針,它可以用來詳細地描述緩衝區。

當內容已被寫入檔案時,調用EndRequest來結束此操作。

dwContext的預設值由MFC從創建此CHttpFile對象的CInternetSession對象傳送到CHttpFile對象。當調用CInternetSession::OpenURL 或CHttpConnection 來構造一個CHttpFile對象時,可覆蓋此預設值,來設定你所選擇的值的上下文標識符。上下文標識符返回到CInternetSession::OnStatusCallback ,提供其所代表的對象狀態。請參閱在線上文檔“Visual C++程式設計師指南”中的“Internet初步:WinInet”,以了解有關上下文標識符的更多信息。

示例:

此代碼段傳送一個字元串的內容到名為ISAPI的DLL 中,DLL在伺服器中為MOOSEBOY。此示例對WriteString的調用只有一個,但可以使用多個來傳送成塊數據。

CString strData = "Some very long data to be POSTed here!";

pServer = sess.GetHttpConnection("mooseboy");

pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST, "/isapi.dll?");

pFile->SendRequestEx(strData.GetLength());

pFile->WriteString(strData);

pFile->EndRequest();

相關詞條

相關搜尋

熱門詞條

聯絡我們