代碼如下
BOOL CHttpTransfer::Post(LPCTSTR szRemoteURI,const char* sendBuf,int sendLen, ReceiveData& revData,const CString& strContentType/*=ContentType_TEXT_PLAN*/)
{
assert(NULL != szRemoteURI);
BOOL bResult = FALSE;
DWORD dwType = 0;
CString sServer = _T("");
CString sObject = _T("");
INTERNET_PORT wPort = 0;
DWORD dwPostSize = 0;
CHttpConnection* pHttpConn = NULL;
CHttpFile* pHttpFile = NULL;
CInternetSession cis(_T(""));
bResult = FALSE;
try
{
bResult = AfxParseURL(szRemoteURI, dwType, sServer, sObject, wPort);
if(!bResult)
return FALSE;
cis.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 5000);
cis.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 1);
pHttpConn = cis.GetHttpConnection(sServer,wPort, NULL, NULL);
assert(NULL != pHttpConn);
pHttpFile = pHttpConn->OpenRequest(CHttpConnection::HTTP_VERB_POST, sObject);
assert(NULL != pHttpFile);
//準備HTTP頭部
CString strTemp;
CString strHeaders = _T("Content-Type:")+strContentType;//application/x-www-form-urlencoded //multipart/form-data text/plan
strHeaders +=_T("\r\nAccept-Language:zh-cn");
strHeaders +=_T("\r\nAccept-Charset:utf-8");
//strHeaders += _T("\r\nReferer:");
//strHeaders += szRemoteURI;
/*設定請求相關引數*/
//pHttpFile->AddRequestHeaders(L"Accept: */*,application/json");//accept請求報頭域,表示客戶端接受哪些型別的資訊
//pHttpFile->AddRequestHeaders(L"Accept-Charset:UTF8");
//pHttpFile->AddRequestHeaders(L"Accept-Language: zh-cn;q=0.8,en;q=0.6,ja;q=0.4");
//pHttpFile->AddRequestHeaders(L"Content-Type:")+strContentType;//application/x-www-form-urlencoded //multipart/form-data text/plan
strHeaders +=_T("\r\nAccept-Language:zh-cn");
strHeaders +=_T("\r\nAccept-Charset:utf-8");
bResult = FALSE;
if(sendLen==0)
bResult=pHttpFile->SendRequest(strHeaders,_T("1"),1); //為了保證回傳的資料是正確的。
else
bResult=pHttpFile->SendRequest(strHeaders,(LPVOID)sendBuf,sendLen);
if(bResult)
bResult = HttpReceive(pHttpFile,revData);
}
catch (CFileException* e)
{
e->Delete();
//REPORT_CACHED_EXCEPTION(_T("CFileException"));
}
catch (CInternetException* e)
{
CString sError;
sError.Format(_T("Inernet connection error : %d"), e->m_dwError);
//用于回傳網路例外資訊
TCHAR szError[64]={0};
e->GetErrorMessage(szError,64);
revData.errInfo = szError;
revData.nErrorCode = e->m_dwError;
e->Delete();
}
if (pHttpFile)
{
pHttpFile->Close();
delete pHttpFile;
}
if (pHttpConn)
{
pHttpConn->Close();
delete pHttpConn;
}
cis.Close();
return bResult;
}
uj5u.com熱心網友回復:
是不是瀏覽器有使用代理等。uj5u.com熱心網友回復:
判斷每隔函式呼叫的回傳值?抓包?
關閉UAC、防火墻、殺毒軟體、……?
uj5u.com熱心網友回復:
每隔 → 每個uj5u.com熱心網友回復:
...http問題就多了。各種因素。比如ie是否代理
以及對應網頁是否過濾機器爬蟲,根據http 頭。甚至cookie那些。都要檢查下。
uj5u.com熱心網友回復:
試試重置Winsocket命令列下運行 netsh winsock reset
uj5u.com熱心網友回復:
樓主解決了沒,分享下經驗吧轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/76829.html
標籤:基礎類
下一篇:開發跨平臺桌面應用
