HTTP命令在VC中如何调用
正在做一个camera控制的界面程序,camera的manual上本来有一些直接以http指令控制的功能,如
http://server/axis-cgi/jpg/image.cgi
就可以保存当前显示的那帧图像
但是我想在MFC中直接调用这个http命令,该怎么调用呢?
[解决办法]
可以使用CInternetSession来做,也可以直接使用socket来模拟HTTP协议
[解决办法]
可以先用Fiddler2抓包,一般是返回一个图象的数据包
这样你就可以CInternetSession来保存了
CString strObject;
INTERNET_PORT nPort;
CString strServer;
CString strHeaders =_T("Content-Type: application/x-www-form-urlencoded");
CString strFormData;
CString strURL;
int (*funCall)(CWnd * ,CHttpFile *,BOOL);
BOOL bPost;
DWORD dwServiceType;
CString strContent="";
CHttpConnection* pServer = NULL;
CHttpFile* pFile = NULL;
CInternetSession *pSession;
CWnd *pWnd;
try
{
if(!AfxParseURL(strURL,dwServiceType,strServer,strObject,nPort)||
dwServiceType != INTERNET_SERVICE_HTTP)
{
//MessageBox(_T("不是HTTP站点"),_T("错误"));
return 0;
}
pServer = pSession->GetHttpConnection(strServer,nPort);
if( bPost )
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,strObject);//NULL,1,NULL,NULL,
else
pFile = pServer->OpenRequest(1,strObject,NULL,1,NULL,NULL,
INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_NO_AUTO_REDIRECT );
pFile->AddRequestHeaders(_T("Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*"));
pFile->AddRequestHeaders(_T("Referer: ")+strURL);
pFile->AddRequestHeaders(_T("Accept-Language: zh-cn"));
pFile->AddRequestHeaders(_T("Content-Type: application/x-www-form-urlencoded"));
pFile->AddRequestHeaders(_T("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"));
BOOL result;
if( bPost )
result = pFile->SendRequest(NULL,0,
(LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());
else
result = pFile->SendRequest();
DWORD dwRet;
pFile->QueryInfoStatusCode(dwRet);
if (dwRet != HTTP_STATUS_OK)
{
if( funCall )
(*funCall)(pWnd,pFile,FALSE);
//MessageBox("读取登录时状态不正确!\n");
return 0;
}
{
BYTE data[1025]={0};
DWORD len;
while(1)
{
len=pFile->Read(data,1024);
if( len<=0 )break;
fp.Write(data,len);
}
fp.Close();
}
pFile->Close();
pServer->Close();
if (pFile != NULL)
delete pFile;
if (pServer != NULL)
delete pServer;
}
catch (CInternetException* pEx)
{
char szErr[256];
if(!pEx->GetErrorMessage(szErr, 256))
strcpy(szErr,"Some crazy unknown error");
pFile->Close();
delete pFile;
pServer->Close();
delete pServer;
pEx->Delete();
return 0;
}
return 1;
[解决办法]
HttpAnalyzer比较好用,强烈建议!