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);
說明:
調用此成員函式來結束用成員函式傳送HTTP伺服器的請求。
返回值:
一個CString對象,包含一個參照與本檔案相關聯資源的URL。
說明:
調用該成員函式,得到以URL表示的HTTP檔案的名字。
CHttpFile::GetObject
CString GetObject( ) const;
返回值:一個包含對象名稱的CString對象。
說明:
調用該成員函式以了解與此CHttpFile相關聯的對象名稱。
CHttpFile::GetVerb
CString GetVerb( ) const;
返回值:一個包含HTTP動詞名的CString對象。
調用該成員函式以了解與此CHttpFile相關聯的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;
調用此成員函式返回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();