標籤: 暫無標籤

  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修改新頭部的語義。可能為以下幾種之一: · HTTP_ADDREQ_FLAG_COALESCE 利用標記來添加後續頭部的第一個頭部,從而合併相同名字的頭部。例如,「Accept:audio/*」后的「Accept: text/*」導致形成一個唯一的頭部「Accept:text/*,audio/*」。考慮到從與合併或獨立頭一起發送的請求中收到的數據,要靠調用應用來保證一個有內聚力的體制。 · HTTP_ADDREQ_FLAG_REPLACE 執行移動和添加,替換當前頭。頭名稱將被用於移動當前頭,全值將被用於添加新頭。如果頭部值為空且頭已被找到,則移走它。如果不為空,則頭值被替換。 · HTTP_ADDREQ_FLAG_ADD_IF_NEW 如果不存在,則只需添加頭;如果有一個存在,則出錯返回。 · HTTP_ADDREQ_FLAG_ADD 與REPLACE一起使用。如果不存在,則添加頭。
dwHeadersLenpstrHeaders的長度,以字元計算。如果為-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 );

  參數:

  
hFileInternet文件的句柄。
hSessionInternet會話的句柄。
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的指針。
dwContextCHttpFile操作的上下文標識符。請參閱說明,以了解此參數的更多信息。


  說明:

  調用此成員函數來結束用成員函數發送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查詢屬性和下列指定所須信息標誌的組合: · HTTP_QUERY_CUSTOM 查找頭名稱並在輸出中返回lpvBuffer中的值。如果未找到,HTTP_QUERY_CUSTOM 產生斷言。 · HTTP_QUERY_FLAG_REQUEST_HEADERS 是典型的,此應用查詢請求頭,但一個應用也可通過使用此標記查詢請求頭。 · HTTP_QUERY_FLAG_SYSTEMTIME 對於那些值為日期/時間字元串的頭,如「Last-Modified-Time」,此標記返回如標準Win32SYSTEMTIME結構的頭值,而不需應用對數據進行文法分析映射。如果使用了此標記,你可能要使用SYSTEMTIME 覆蓋此函數。 · HTTP_QUERY_FLAG_NUMBER 對於那些值為數字的頭,如狀態號,此標記返回一個32位的數據。請參閱說明部分以了解可能值的列表。
lpvBuffer一個指向用於接收信息的緩衝區的指針。
lpdwBufferLength在入口處,這是指向一個用位元組或位表示的包含數據緩衝區長度的值。請參閱說明部分以了解此參數的詳細信息。
lpdwIndex一個指向基於零的頭索引的指針。可以為NULL。使用此標記來枚舉同名的多個頭。對於輸入,lpdwIndex表示返回的指定的頭的索引。對於輸出,lpdwIndex 表示下一個頭的索引。如果此索引找不到,則返回ERROR_HTTP_HEADER_NOT_FOUND。
str接收返回信息的CString對象的參考值。
dwIndex一個索引值。請參閱lpdwIndex。
pSysTime一個指向Win32 SYSTEMTIME結構的指針。
pstrHeaders一個指向某字元串的指針,該字元串包含添加到請求中的頭。每個頭都必須以CR/LF結束。
dwFlags修改新頭部的語義。可能為以下幾種之一: · HTTP_ADDREQ_FLAG_COALESCE 利用標記來添加後續頭部的第一個頭部,從而合併相同名字的頭部。例如,「Accept:audio/*」后的「Accept: text/*」導致形成一個唯一的頭部「Accept:text/*,audio/*」。考慮到從與合併或獨立頭一起發送的請求中收到的數據,要靠調用應用來保證一個有內聚力的體制。 · HTTP_ADDREQ_FLAG_REPLACE 執行移動和添加,替換當前頭。頭名稱將被用於移動當前頭,全值將被用於添加新頭。如果頭部值為空且頭已被找到,則移走它。如果不為空,則頭值被替換。 · HTTP_ADDREQ_FLAG_ADD_IF_NEW 如果不存在,則只需添加頭;如果有一個存在,則出錯返回。 · HTTP_ADDREQ_FLAG_ADD 與REPLACE一起使用。如果不存在,則添加頭。
dwHeadersLenpstrHeaders的長度,以字元計算。如果為-1L,則pstrHeaders被假定為是空終止的,且長度已被計算出來了。
str一個CString對象的參考,包含請求頭或者將被添加的頭。


  說明:

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

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

  
·strings (預設)
·SYSTEMTIME (對於「Data:」「expires:」等)
·DWORD (對於 STATUS_CODE,CONTENT_LENGTH等等)


  當一個字元串被寫入緩衝區,且成員函數成功時,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

  BOOL QueryInfoStatusCode( DWORD& dwStatusCode ) const;

  返回值:

  如果成功,則返回非零值,否則為0。如果此調用失敗,可通過調用Win32的函數GetLastError來確定錯誤原因。

  參數:

  
dwStatusCode狀態號的參考值。狀態號標識請求事件是成功還是失敗。請參閱說明部分,以了解狀態號的細節。


  說明:

  調用此成員函數以獲得HTTP請求相關聯的狀態號並將其放到所提供的dwStatusCode 參數中。只有在SendRequest 被成功調用或者一個CHttpFile對象被 OpenURL成功創建后,才能使用該成員函數。

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

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


  常用的HTTP狀態號:

  
狀態號含義
200URL定位,接著傳輸
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。
dwOptionalLenlpOptional的長度。
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。
dwContextCHttpFile操作的上下文標識符。請參閱說明部分關於此參數的更多信息。
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();
上一篇[胛]    下一篇 [笳]

相關評論

同義詞:暫無同義詞