CHttpConnection::OpenRequest 詳解

來源:互聯網
上載者:User

CHttpConnection::OpenRequest
CHttpFile* OpenRequest( LPCTSTR pstrVerb,
                        LPCTSTR pstrObjectname,
                        LPCTSTR pstrReferer = NULL,
                        DWORD dwContext = 1,
                        LPCTSTR* pstrAcceptTypes = NULL,
                        LPCTSTR pstrVersion = NULL,
                        DWORD dwFlags = INTERNET_FLAG_EXISTING_CONNECT
                       );
CHttpFile* OpenRequest( int nVerb,
                        LPCTSTR pstrObjectName,
                        LPCTSTR pstrReferer = NULL,
                        DWORD dwContext = 1,
                        LPCTSTR* pstrAcceptTypes = NULL,
                        LPCTSTR pstrVersion = NULL,
                        DWORD dwFlags = INTERNET_FLAG_EXISTING_CONNECT
                       );
傳回值:
一個指向所需的CHttpFile對象的指標。
參數:
pstrVerb  一個指向某個包含在請求中要用的動詞的字串指標。如果為NULL,則使用“GET”。  
pstrObjectName  一個指向某個包含特殊動詞的目標對象的字串的指標。通常為檔案名稱、可執行模組或者尋找標識符。  
pstrReferer  一個指向指定了包含著所需的URL (pstrObjectName)的文檔地址(URL)的指標。如果為NULL,則不指定HTTP頭。  
dwContext  OpenRequest操作的上下文標識符。請參閱說明部分,以瞭解更多的關於dwContext的資訊。  
pstrAcceptTypes  一個指向某空終止符的字串的指標,該字串表示客戶接受的內容類型。如果該字串為NULL,伺服器認為客戶接受“text/*”類型的文檔 (也就是說,只有純文字文檔,並且不是圖片或其它二進位檔案)。內容類型與CGI變數CONTENT_TYPE相同,該變數確定了要查詢的含有相關資訊的資料的類型,如HTTP POST和PUT。  
pstrVersion  一個指向定義HTTP版本的字串的指標。如果為NULL,則使用“HTTP/1.0”。dwFlags任意INTERNET_FLAG_*標記的組合。請參閱說明部分,以瞭解可能的dwFlags值的細節。  
nVerb  與HTTP請求類型有關的數字。可能為以下值之一: HTTP請求類型  nVerb值  
HTTP_VERB_POST  0  
HTTP_VERB_GET  1  
HTTP_VERB_HEAD  2  
HTTP_VERB_PUT  3  
HTTP_VERB_LINK  4  
HTTP_VERB_DELETE  5  
HTTP_VERB_UNLINK  6  
 
 
說明:
調用該成員函數,用以開啟一個HTTP串連。
dwFlags可能為以下值之一:
Internet標記  描述  
INTERNET_FLAG_RELOAD  強行從資原始伺服器下載所需的檔案、對象或路徑列表,而不是從緩衝中  
INTERNET_FLAG_DON'T_CACHE  不向緩衝添加返回的實體  
INTERNET_FLAG_MAKE_PERSISTENT  將返回實體作為永久性實體添加到緩衝中,這表示標準緩衝清空,相容性檢查或  
INTERNET_FLAG_SECURE  者記憶體回收都不能從緩衝中移出該項使用安全事務語義。使用SSL/PCT的說明只在HTTP請求中才有意義  
INTERNET_FLAG_NO_AUTO_REDIRECT  只與HTTP一起使用,表示改變路徑不能在CHttpFile::SendRequest中被自動處理 

覆蓋dwContext 預設值,為你所選的值設定一個上下文標識符。上下文標識符與用CInternetSession對象建立的CHttpConnection對象的指定的操作相關聯。
該值被返回到CInternetSession::OnStatusCallback中,用以提供其所確定的操作狀態。請參閱“Internet初步:WinInet”,以瞭解有關上下文標識符的更多資訊。
上面部分是標準MSDN文檔的描述
具體使用方法如下:
 CString strServerName,strObject,strURL="http://hi.baidu.com/5iprog/blog/item/eaaee4105b9ef06bcb80c464.html";
 DWORD dwFlags = INTERNET_FLAG_TRANSFER_BINARY;
 DWORD dwHttpRequestFlags = INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_TRANSFER_BINARY;
 DWORD dwServiceType;
 INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER;
 BOOL bResult =  AfxParseURL(strURL, dwServiceType, strServerName, strObject, nPort);
 if(!bResult)   
 {
  return FALSE;
 }
 CInternetSession session(theApp.m_pszAppName,(DWORD)this,PRE_CONFIG_INTERNET_ACCESS,NULL,NULL,INTERNET_FLAG_DONT_CACHE);
 CHttpConnection* pServer = session.GetHttpConnection( strServerName, dwFlags, nPort, NULL/*username*/,NULL/*password*/);
 CHttpFile* pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET, strObject, NULL, (DWORD)this, (LPCTSTR*)_T("*/*\0"), NULL, dwHttpRequestFlags);
 
我在程式中剛開始設定接受類型為空白,即
 CHttpFile* pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET, strObject, NULL, (DWORD)this, NULL, NULL, dwHttpRequestFlags);
則上傳檔案時有時能上傳完檔案有時上傳一部分後報InternetWriteFile Error.查看http伺服器日誌發現400錯誤,原因是預設的設定的是上傳文字檔但是實際上我上傳了二進位檔案,伺服器接收時不能解析,所以報400 (無效的要求標頭)然後終止上傳了。

轉帖:http://hi.baidu.com/5iprog/blog/item/4f83dbb00c1f3243092302e5.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.