CHttpFile
| CObject |
| └CFile |
| └CStdioFile |
| └CInternetFile |
| └CHttpFile |
CHttpFile提供向HTTP服務(wù)器中請求和讀取的功能。
如果Internet會(huì )話(huà)要從一個(gè)HTTP服務(wù)器中讀取數據,則必須構造一個(gè)CHttpFile實(shí)例。
#include <afxinet.h>
CHttpFile類(lèi)的成員
構造函數
| CHttpFile | 構造一個(gè)CHttpFile對象 |
操作
| AddRequestHeaders | 添加發(fā)往HTTP服務(wù)器的請求頭 |
| SendRequest | 向HTTP服務(wù)器發(fā)送請求 |
| SendRequestEx | 利用CInternetFile的Write或WriteString方法向HTTP服務(wù)器發(fā)送請求 |
| EndRequest | 利用EndRequestEx的成員函數結束HTTP服務(wù)器的請求 |
| QueryInfo | 返回來(lái)自HTTP服務(wù)器的回答或請求頭 |
| QueryInfoStatusCode | 獲取與HTTP請求相關(guān)聯(lián)的狀態(tài)號,并將其放到提供的dwStatusCode 參數中 |
| GetVerb | 獲取用于對HTTP服務(wù)器的請求的動(dòng)詞 |
| GetObject | 獲取對HTTP服務(wù)器的請求中的動(dòng)詞的目標對象 |
| GetFileURL | 獲取指定文件的URL |
| Close | 關(guān)閉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 會(huì )被調用,確定失敗的原因。
參數:
| pstrHeaders | 一個(gè)指向某字符串的指針,該字符串包含添加到請求中的頭。每個(gè)頭都必須以CR/LF結束。 | ||||||||||||
| dwFlags | 修改新頭部的語(yǔ)義??赡転橐韵聨追N之一:
| ||||||||||||
| dwHeadersLen | pstrHeaders的長(cháng)度,以字符計算。如果為-1L,則pstrHeaders被假定為是空終止的,且長(cháng)度已被計算出來(lái)了。 | ||||||||||||
| str | 一個(gè)CString對象的參考,包含請求頭或者將被添加的頭。 |
說(shuō)明:
調用該成員函數,用來(lái)對HTTP請求操作添加一個(gè)或多個(gè)請求頭。AddRequestHeaders增加附加的、形式自由的頭到HTTP請求操作中。其往往被高級客戶(hù)使用,他們需要對發(fā)往HTTP服務(wù)器的指定的請求進(jìn)行具體控制。
注意:
對于使用HTTP_ADDREQ_FLAG_ADD或者HTTP_ADDREQ_FLAG_ADD_IF_NEW對AddRequestHeaders的調用,應用可在pstrHeaders 或str中,一次傳遞多個(gè)頭。如果應用試圖使用HTTP_ADDREQ_FLAG_REMOVE或HTTP_ADDREQ _FLAG_REPLACE來(lái)移動(dòng)或替換一個(gè)頭,則lpszHeaders中只能提供一個(gè)頭。
CHttpFile::CHttpFile
CHttpFile( HINTERNET hFile, HINTERNET hSession, LPCTSTR pstrObject, LPCTSTRpstrServer, LPCTSTR pstrVerb, DWORD dwContext );
CHttpFile( HINTERNET hFile, LPCTSTR pstrVerb, LPCTSTR pstrObject,CHttpConnection* pConnection );
參數:
| hFile | Internet文件的句柄。 |
| hSession | Internet會(huì )話(huà)的句柄。 |
| pstrObject | 一個(gè)指向包含CHttpFile對象名稱(chēng)的字符串的指針。 |
| pstrServer | 一個(gè)指向包含服務(wù)器名稱(chēng)的字符串的指針。 |
| pstrVerb | 一個(gè)指向某字符串的指針,該字符串包含在發(fā)送請求時(shí)將要使用的方法,可能為POST,HEAD或GET。 |
| dwContext | 一個(gè)CHttpFile對象的上下文標識符。請參閱說(shuō)明,以了解有關(guān)該參數的更多信息。 |
| pConnection | 一個(gè)指向CHttpConnection對象的指針。 |
說(shuō)明:
調用該成員函數來(lái)構造一個(gè)CHttpFile對象。
不能直接構造一個(gè)CHttpFile對象,但可以調用CInternetSession::OpenURL或CHttpConnection::OpenRequest。
dwContext的缺省值由MFC從創(chuàng )建此CHttpFile對象的CInternetSession對象發(fā)送到CHttpFile對象。當調用CInternetSession::OpenURL 或CHttpConnection 來(lái)構造一個(gè)CHttpFile對象時(shí),可覆蓋此缺省值,來(lái)設置你所選擇的值的上下文標識符。上下文標識符返回到CInternetSession::OnStatusCallback ,提供其所代表的對象狀態(tài)。
CHttpFile::Close
virtual void Close( );
說(shuō)明:
關(guān)閉CHttpFile 并釋放其資源。只有在對SendRequest的成功調用或者一個(gè)CHttpFile對象被 OpenURL成功創(chuàng )建后,才能使用該成員函數。
CHttpFile::EndRequest
BOOL EndRequest(DWORD dwFlags = 0, LPINTERNET_BUFFERS lpBuffln = NULL, DWORDdwContext = 1);
throw(CInternetException);
返回值:
如果成功,則返回非零值,否則為0。如果此調用失敗,可通過(guò)檢查產(chǎn)生的CInternetException對象來(lái)確定錯誤原因。
參數:
| dwFlags | 描述此操作的標記。要了解適當標記的列表,請參閱聯(lián)機文檔“平臺SDK”中的HttpEndRequest。 |
| lpBuffIn | 指向描述此操作的輸入緩沖區的初始INTERNET_BUFFERS的指針。 |
| dwContext | CHttpFile操作的上下文標識符。請參閱說(shuō)明,以了解此參數的更多信息。 |
說(shuō)明:
調用此成員函數來(lái)結束用成員函數發(fā)送HTTP服務(wù)器的請求。
dwContext的缺省值由MFC從創(chuàng )建此CHttpFile對象的CInternetSession對象發(fā)送到CHttpFile對象。當調用CInternetSession::OpenURL 或CHttpConnection 來(lái)構造一個(gè)CHttpFile對象時(shí),可覆蓋此缺省值,來(lái)設置你所選擇的值的上下文標識符。上下文標識符返回到CInternetSession::OnStatusCallback ,提供其所代表的對象狀態(tài)。
CHttpFile::GetFileURL
virtual CString GetFileURL( ) const;
返回值:
一個(gè)CString對象,包含一個(gè)參照與本文件相關(guān)聯(lián)資源的URL。
說(shuō)明:
調用該成員函數,得到以URL表示的HTTP文件的名字。只有在對SendRequest的成功調用或者一個(gè)CHttpFile對象被OpenURL成功創(chuàng )建后,才能使用該成員函數。
CHttpFile::GetObject
CString GetObject( ) const;
返回值:一個(gè)包含對象名稱(chēng)的CString對象。
說(shuō)明:
調用該成員函數以了解與此CHttpFile相關(guān)聯(lián)的對象名稱(chēng)。只有在對SendRequest的成功調用或者一個(gè)CHttpFile對象被OpenURL成功創(chuàng )建后,才能使用該成員函數。
CHttpFile::GetVerb
CString GetVerb( ) const;
返回值:一個(gè)包含HTTP動(dòng)詞名的CString對象。
說(shuō)明:
調用該成員函數以了解與此CHttpFile相關(guān)聯(lián)的HTTP動(dòng)詞。只有在SendRequest 被成功調用或者一個(gè)CHttpFile對象被 OpenURL成功創(chuàng )建后,才能使用該成員函數。
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。如果此調用失敗,可通過(guò)調用Win32的函數GetLastError來(lái)確定錯誤原因。
參數:
| dwInfoLevel | 查詢(xún)屬性和下列指定所須信息標志的組合:
請參閱說(shuō)明部分以了解可能值的列表。 | ||||||||||||
| lpvBuffer | 一個(gè)指向用于接收信息的緩沖區的指針。 | ||||||||||||
| lpdwBufferLength | 在入口處,這是指向一個(gè)用字節或位表示的包含數據緩沖區長(cháng)度的值。請參閱說(shuō)明部分以了解此參數的詳細信息。 | ||||||||||||
| lpdwIndex | 一個(gè)指向基于零的頭索引的指針??梢詾?span lang="EN-US">NULL。使用此標記來(lái)枚舉同名的多個(gè)頭。對于輸入,lpdwIndex表示返回的指定的頭的索引。對于輸出,lpdwIndex 表示下一個(gè)頭的索引。如果此索引找不到,則返回ERROR_HTTP_HEADER_NOT_FOUND。 | ||||||||||||
| str | 接收返回信息的CString對象的參考值。 | ||||||||||||
| dwIndex | 一個(gè)索引值。請參閱lpdwIndex。 | ||||||||||||
| pSysTime | 一個(gè)指向Win32 SYSTEMTIME結構的指針。 |
說(shuō)明:
調用此成員函數返回HTTP請求中的回答或請求頭。只有在SendRequest被成功調用或者一個(gè)CHttpFile對象被 OpenURL成功創(chuàng )建后,才能使用該成員函數。
你可從QueryInfo中獲取以下數據類(lèi)型:
| · | strings (缺省) |
| · | SYSTEMTIME (對于“Data:”“Expires:”等) |
| · | DWORD (對于 STATUS_CODE,CONTENT_LENGTH等等) |
當一個(gè)字符串被寫(xiě)入緩沖區,且成員函數成功時(shí),lpdwBufferLength 包含字符串的字節長(cháng)減一,去掉結束NULL字符的長(cháng)度。
可能的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。如果此調用失敗,可通過(guò)調用Win32的函數GetLastError來(lái)確定錯誤原因。
參數:
| dwStatusCode | 狀態(tài)號的參考值。狀態(tài)號標識請求事件是成功還是失敗。請參閱說(shuō)明部分,以了解狀態(tài)號的細節。 |
說(shuō)明:
調用此成員函數以獲得HTTP請求相關(guān)聯(lián)的狀態(tài)號并將其放到所提供的dwStatusCode 參數中。只有在SendRequest 被成功調用或者一個(gè)CHttpFile對象被 OpenURL成功創(chuàng )建后,才能使用該成員函數。
分組的HTTP 狀態(tài)號標識請求的成功或失敗。以下列表列出了狀態(tài)號組及大部分常用狀態(tài)號。
| 分組 | 含義 |
| 200-299 | 成功 |
| 300-399 | 信息 |
| 400-499 | 請求錯誤 |
| 500-599 | 服務(wù)器錯誤 |
常用的HTTP狀態(tài)號:
| 狀態(tài)號 | 含義 |
| 200 | URL定位,接著(zhù)傳輸 |
| 400 | 不可理解的請求 |
| 404 | 所請求的URL未找到 |
| 405 | 服務(wù)器不支持所請求的方法 |
| 500 | 未知的服務(wù)器錯誤 |
| 503 | 已達到服務(wù)器容量 |
CHttpFile::SendRequest
BOOL SendRequest( LPCTSTR pstrHeaders = NULL, DWORD dwHeadersLen = 0, LPVOIDlpOptional = NULL, DWORD dwOptionalLen= 0 );
throw(CInternetException);
BOOL SendRequest( CString& strHeaders, LPVOID lpOptional = NULL, DWORDdwOptionalLen = 0 );
throw(CInternetException);
返回值:
如果成功,則返回非零值,否則為0。如果此調用失敗,可通過(guò)檢查產(chǎn)生的CInternetException對象來(lái)確定錯誤原因。
參數:
| pstrHeaders | 一個(gè)指向包含著(zhù)要發(fā)送的頭名稱(chēng)的字符串的指針。 |
| dwHeadersLen | 由pstrHeaders指定的頭的長(cháng)度。 |
| lpOptional | 在請求頭后立即發(fā)送的任意選項數據。通常用于POST和PUT操作。如果沒(méi)有待發(fā)送的選項數據,則可能為NULL。 |
| dwOptionalLen | lpOptional的長(cháng)度。 |
| strHeaders | 一個(gè)包含著(zhù)正被發(fā)送的請求的頭名稱(chēng)的字符串。 |
說(shuō)明:調用此成員函數以向HTTP服務(wù)器發(fā)送請求。
CHttpFile::SendRequestEx
BOOL SendRequestEx(DWORD dwTotalLen, DWORD dwFlags = HSR_INITIATE, DWORDdwContext = 1);
throw(CInternetException);
BOOL SendRequestEx(LPINTERNET_BUFFERS lpBuffIn, LPINTERNET_BUFFERS lpBuffOut,DWORD dwFlags = HSR_INITIATE, DWORD dwContext = 1);
throw(CInternetException);
返回值:
如果成功,則返回非零值,否則為0。如果此調用失敗,可通過(guò)檢查產(chǎn)生的CInternetException對象來(lái)確定錯誤原因。
參數:
| dwTotalLen | 請求中將被發(fā)送的字節數。 |
| dwFlags | 描述操作的標記。要了解適當標記的列表,請參閱聯(lián)機文檔“平臺SDK”中的HttpSendRequstEx。 |
| dwContext | CHttpFile操作的上下文標識符。請參閱說(shuō)明部分關(guān)于此參數的更多信息。 |
| lpBuffIn | 一個(gè)指向描述操作中用到的輸入緩沖區的初始化了的INTERNET_BUFFERS的指針。 |
| lpBufferOut | 一個(gè)指向描述操作中用到的輸出緩沖區的初始化了的INTERNET_BUFFERS的指針。 |
說(shuō)明:
調用此成員函數來(lái)向一個(gè)HTTP 服務(wù)器發(fā)送請求。此函數允許應用使用CInternetFile的Write和WriteString來(lái)發(fā)送數據。在調用任一此函數的覆蓋前,必須知道發(fā)送的數據長(cháng)度。第一個(gè)覆蓋允許確定你要發(fā)送的數據長(cháng)度。第二個(gè)覆蓋接收指向INTERNET_BUFFERS結構的指針,它可以用來(lái)詳細地描述緩沖區。
當內容已被寫(xiě)入文件時(shí),調用EndRequest來(lái)結束此操作。
dwContext的缺省值由MFC從創(chuàng )建此CHttpFile對象的CInternetSession對象發(fā)送到CHttpFile對象。當調用CInternetSession::OpenURL 或CHttpConnection 來(lái)構造一個(gè)CHttpFile對象時(shí),可覆蓋此缺省值,來(lái)設置你所選擇的值的上下文標識符。上下文標識符返回到CInternetSession::OnStatusCallback ,提供其所代表的對象狀態(tài)。請參閱聯(lián)機文檔“Visual C++程序員指南”中的“Internet初步:WinInet”,以了解有關(guān)上下文標識符的更多信息。
示例:
此代碼段發(fā)送一個(gè)字符串的內容到名為ISAPI的DLL 中,DLL在服務(wù)器中為MOOSEBOY。此示例對WriteString的調用只有一個(gè),但可以使用多個(gè)來(lái)發(fā)送成塊數據。
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();
聯(lián)系客服