VC連線HTTP伺服器 & MFC 處理 HTTP 請求的基本方法
阿新 • • 發佈:2019-01-29
用 MFC 發起 HTTP Post 請求,主要流程和 MFC HTTP Get 程式碼一樣,以下是示例程式碼:
//通過 http POST 協議來發送命令給伺服器 CInternetSession session; session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 1000 * 20); session.SetOption(INTERNET_OPTION_CONNECT_BACKOFF, 1000); session.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 1); CHttpConnection* pConnection = session.GetHttpConnection( TEXT("localhost"), (INTERNET_PORT)8080); CHttpFile* pFile = pConnection->OpenRequest( CHttpConnection::HTTP_VERB_POST, TEXT("/Practice/RequestObjectInJSP.jsp"), NULL, 1, NULL, TEXT("HTTP/1.1"), INTERNET_FLAG_RELOAD); //需要提交的資料 CString szHeaders = L"Content-Type: application/x-www-form-urlencoded;"; //下面這段編碼,則是可以讓伺服器正常處理 CHAR* strFormData = "username=WaterLin&password=TestPost"; pFile->SendRequest( szHeaders, szHeaders.GetLength(), (LPVOID)strFormData, strlen(strFormData)); DWORD dwRet; pFile->QueryInfoStatusCode(dwRet); if(dwRet != HTTP_STATUS_OK) { CString errText; errText.Format(L"POST出錯,錯誤碼:%d", dwRet); AfxMessageBox(errText); } else { int len = pFile->GetLength(); char buf[2000]; int numread; CString filepath; CString strFile = L"result.html"; filepath.Format(L".\\%s", strFile); CFile myfile(filepath, CFile::modeCreate|CFile::modeWrite|CFile::typeBinary); while ((numread = pFile->Read(buf,sizeof(buf)-1)) > 0) { buf[numread] = '\0'; strFile += buf; myfile.Write(buf, numread); } myfile.Close(); } session.Close(); pFile->Close(); delete pFile;
以上的程式碼,與 Get 對比起來,唯一的不同在於,提交 CHttpFile::SendRequest() 資料的時候,把表單的資料也帶上了。