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