当前位置: 代码迷 >> VC/MFC >> 关于网页接收图片解决思路
  详细解决方案

关于网页接收图片解决思路

热度:115   发布时间:2016-05-02 03:33:59.0
关于网页接收图片
本帖最后由 oyljerry 于 2015-09-24 09:57:21 编辑
这是一段接收微信红包的代码。先向服务器发送红包请求,服务器会返回一个微信的链接,在打开微信链接后,会返回一个二维码图片,扫码就会有红包。
但是MFC的对话框按键接收一次后,再按键接收,发现还是原来的图片,没有收到新的红包,而在游览器中试,二维码会更新。小白,不知道是哪里没清空还是什么原因?

void OnRead() 
{
 CInternetSession c ; 
 CHttpFile * p=NULL ;
 p=(CHttpFile*)c.OpenURL("http://xxx.xxx.xx.xx/xxxxxxxx/xx") ;   //打开一个URL
 CString str ;
 CString info="";
 while(p->ReadString(str))   //读取网页数据 
  info+=str ;


const int dwBufSize = 1024;
CInternetSession   *   Session   =   new   CInternetSession; 
CHttpFile*                 pHttpFile   =   NULL;   
CStdioFile                 pLocalFile;               
DWORD dwlen; 
try

LPBYTE   lpBuf   =   new   byte[dwBufSize];   
//   把这个szPath置为D://test.jpg就行了
pLocalFile.Open(   "D://test.jpg", 
CFile::modeCreate   |   
CFile::modeWrite     |   
CFile::typeBinary   ); 
pHttpFile   =(CHttpFile*)Session->OpenURL( 
info, 
1, 
INTERNET_FLAG_TRANSFER_BINARY   | 
INTERNET_FLAG_RELOAD   |   
INTERNET_FLAG_DONT_CACHE, 
NULL, 
0); 
while(dwlen   =   pHttpFile-> Read(lpBuf,   dwBufSize-1   )) 

pLocalFile.Write(lpBuf,dwlen); 

pLocalFile.Close();   
pHttpFile->Close(); 
pHttpFile=NULL; 
delete[]   lpBuf; 
}
catch(CInternetException   eInt) 

eInt.Delete();

catch(CMemoryException   eMem)   

eMem.Delete(); 

catch(CFileException   eFile)   

eFile.Delete(); 
}

}

------解决思路----------------------
用了,INTERNET_FLAG_RELOAD   
------解决思路----------------------
   
INTERNET_FLAG_DONT_CACHE, 应该不会有这个问题。

不过,平时我都习惯性地在链接地址上加一下

"?rand=yyyymmddhhmmss"

你把

http://xxx.xxx.xx.xx/xxxxxxxx/xx

改为

http://xxx.xxx.xx.xx/xxxxxxxx/xx?rand=yyyymmddhhmmss

试试,这个保证不会拿到缓存
  相关解决方案