CHttpFile
CObject |
└CFile |
└CStdioFile |
└CInternetFile |
└CHttpFile |
CHttpFile提供向HTTP服務器中請求和讀取的功能。
如果Internet會話要從一個HTTP服務器中讀取數據,則必須構造一個CHttpFile實例。
#include <afxinet.h>
CHttpFile類的成員
構造函數
CHttpFile | 構造一個CHttpFile對象 |
操作
AddRequestHeaders | 添加發往HTTP服務器的請求頭 |
SendRequest | 向HTTP服務器發送請求 |
SendRequestEx | 利用CInternetFile的Write或WriteString方法向HTTP服務器發送請求 |
EndRequest | 利用EndRequestEx的成員函數結束HTTP服務器的請求 |
QueryInfo | 返回來自HTTP服務器的回答或請求頭 |
QueryInfoStatusCode | 獲取與HTTP請求相關聯的狀態號,並將其放到提供的dwStatusCode 參數中 |
GetVerb | 獲取用於對HTTP服務器的請求的動詞 |
GetObject | 獲取對HTTP服務器的請求中的動詞的目標對象 |
GetFileURL | 獲取指定文件的URL |
Close | 關閉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 會被調用,確定失敗的原因。
參數:
pstrHeaders | 一個指向某字符串的指針,該字符串包含添加到請求中的頭。每個頭都必須以CR/LF結束。 | ||||||||||||
dwFlags | 修改新頭部的語義。可能爲以下幾種之一:
|
||||||||||||
dwHeadersLen | pstrHeaders的長度,以字符計算。如果爲-1L,則pstrHeaders被假定爲是空終止的,且長度已被計算出來了。 | ||||||||||||
str | 一個CString對象的參考,包含請求頭或者將被添加的頭。 |
說明:
調用該成員函數,用來對HTTP請求操作添加一個或多個請求頭。AddRequestHeaders 增加附加的、形式自由的頭到HTTP請求操作中。其往往被高級客戶使用,他們需要對發往HTTP服務器的指定的請求進行具體控制。
注意:
對於使用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 );
參數:
hFile | Internet文件的句柄。 |
hSession | Internet會話的句柄。 |
pstrObject | 一個指向包含CHttpFile對象名稱的字符串的指針。 |
pstrServer | 一個指向包含服務器名稱的字符串的指針。 |
pstrVerb | 一個指向某字符串的指針,該字符串包含在發送請求時將要使用的方法,可能爲POST,HEAD或GET。 |
dwContext | 一個CHttpFile對象的上下文標識符。請參閱說明,以瞭解有關該參數的更多信息。 |
pConnection | 一個指向CHttpConnection對象的指針。 |
說明:
調用該成員函數來構造一個CHttpFile對象。
不能直接構造一個CHttpFile對象,但可以調用CInternetSession::OpenURL 或CHttpConnection::OpenRequest。
dwContext的缺省值由MFC從創建此CHttpFile對象的CInternetSession對象發送到CHttpFile對象。當調用CInternetSession::OpenURL 或CHttpConnection 來構造一個CHttpFile對象時,可覆蓋此缺省值,來設置你所選擇的值的上下文標識符。上下文標識符返回到CInternetSession::OnStatusCallback ,提供其所代表的對象狀態。
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);
返回值:
如果成功,則返回非零值,否則爲0。如果此調用失敗,可通過檢查產生的CInternetException對象來確定錯誤原因。
參數:
dwFlags | 描述此操作的標記。要了解適當標記的列表,請參閱聯機文檔“平臺SDK”中的HttpEndRequest。 |
lpBuffIn | 指向描述此操作的輸入緩衝區的初始INTERNET_BUFFERS的指針。 |
dwContext | CHttpFile操作的上下文標識符。請參閱說明,以瞭解此參數的更多信息。 |
說明:
調用此成員函數來結束用成員函數發送HTTP服務器的請求。
dwContext的缺省值由MFC從創建此CHttpFile對象的CInternetSession對象發送到CHttpFile對象。當調用CInternetSession::OpenURL 或CHttpConnection 來構造一個CHttpFile對象時,可覆蓋此缺省值,來設置你所選擇的值的上下文標識符。上下文標識符返回到CInternetSession::OnStatusCallback ,提供其所代表的對象狀態。
CHttpFile::GetFileURL
virtual CString GetFileURL( ) const;
返回值:
一個CString對象,包含一個參照與本文件相關聯資源的URL。
說明:
調用該成員函數,得到以URL表示的HTTP文件的名字。只有在對SendRequest的成功調用或者一個CHttpFile對象被OpenURL成功創建後,才能使用該成員函數。
CHttpFile::GetObject
CString GetObject( ) const;
返回值:一個包含對象名稱的CString對象。
說明:
調用該成員函數以瞭解與此CHttpFile相關聯的對象名稱。只有在對SendRequest的成功調用或者一個CHttpFile對象被OpenURL成功創建後,才能使用該成員函數。
CHttpFile::GetVerb
CString GetVerb( ) const;
返回值:一個包含HTTP動詞名的CString對象。
說明:
調用該成員函數以瞭解與此CHttpFile相關聯的HTTP動詞。只有在SendRequest 被成功調用或者一個CHttpFile對象被 OpenURL成功創建後,才能使用該成員函數。
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;
返回值:
如果成功,則返回非零值,否則爲0。如果此調用失敗,可通過調用Win32的函數GetLastError來確定錯誤原因。
參數:
dwInfoLevel | 查詢屬性和下列指定所須信息標誌的組合:
|
||||||||||||
lpvBuffer | 一個指向用於接收信息的緩衝區的指針。 | ||||||||||||
lpdwBufferLength | 在入口處,這是指向一個用字節或位表示的包含數據緩衝區長度的值。請參閱說明部分以瞭解此參數的詳細信息。 | ||||||||||||
lpdwIndex | 一個指向基於零的頭索引的指針。可以爲NULL。使用此標記來枚舉同名的多個頭。對於輸入,lpdwIndex表示返回的指定的頭的索引。對於輸出,lpdwIndex 表示下一個頭的索引。如果此索引找不到,則返回ERROR_HTTP_HEADER_NOT_FOUND。 | ||||||||||||
str | 接收返回信息的CString對象的參考值。 | ||||||||||||
dwIndex | 一個索引值。請參閱lpdwIndex。 | ||||||||||||
pSysTime | 一個指向Win32 SYSTEMTIME結構的指針。 |
說明:
調用此成員函數返回HTTP請求中的回答或請求頭。只有在SendRequest被成功調用或者一個CHttpFile對象被 OpenURL成功創建後,才能使用該成員函數。
你可從QueryInfo中獲取以下數據類型:
· | strings (缺省) |
· | SYSTEMTIME (對於“Data:”“Expires:”等) |
· | DWORD (對於 STATUS_CODE,CONTENT_LENGTH等等) |
可能的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
BOOL QueryInfoStatusCode( DWORD& dwStatusCode ) const;
返回值:
如果成功,則返回非零值,否則爲0。如果此調用失敗,可通過調用Win32的函數GetLastError來確定錯誤原因。
參數:
dwStatusCode | 狀態號的參考值。狀態號標識請求事件是成功還是失敗。請參閱說明部分,以瞭解狀態號的細節。 |
說明:
調用此成員函數以獲得HTTP請求相關聯的狀態號並將其放到所提供的dwStatusCode 參數中。只有在SendRequest 被成功調用或者一個CHttpFile對象被 OpenURL成功創建後,才能使用該成員函數。
分組的HTTP 狀態號標識請求的成功或失敗。以下列表列出了狀態號組及大部分常用狀態號。
分組 | 含義 |
200-299 | 成功 |
300-399 | 信息 |
400-499 | 請求錯誤 |
500-599 | 服務器錯誤 |
狀態號 | 含義 |
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);
返回值:
如果成功,則返回非零值,否則爲0。如果此調用失敗,可通過檢查產生的CInternetException對象來確定錯誤原因。
參數:
pstrHeaders | 一個指向包含着要發送的頭名稱的字符串的指針。 |
dwHeadersLen | 由pstrHeaders指定的頭的長度。 |
lpOptional | 在請求頭後立即發送的任意選項數據。通常用於POST和PUT操作。如果沒有待發送的選項數據,則可能爲NULL。 |
dwOptionalLen | lpOptional的長度。 |
strHeaders | 一個包含着正被髮送的請求的頭名稱的字符串。 |
說明:調用此成員函數以向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對象來確定錯誤原因。
參數:
dwTotalLen | 請求中將被髮送的字節數。 |
dwFlags | 描述操作的標記。要了解適當標記的列表,請參閱聯機文檔“平臺SDK”中的HttpSendRequstEx。 |
dwContext | CHttpFile操作的上下文標識符。請參閱說明部分關於此參數的更多信息。 |
lpBuffIn | 一個指向描述操作中用到的輸入緩衝區的初始化了的INTERNET_BUFFERS的指針。 |
lpBufferOut | 一個指向描述操作中用到的輸出緩衝區的初始化了的INTERNET_BUFFERS的指針。 |
說明:
調用此成員函數來向一個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();