获取网络图片

[cpp] view plain​ copy


  1. CString URL="http://www.google.com.hk/images/srpr/logo3w.png"

  2. CInternetSession session;
  3. CHttpFile *httpFile = (CHttpFile *)session.OpenURL(URL);
  4. CStdioFile imgFile;
  5. char buff[1024]; // 缓存

  6. imgFile.Open("图片名字.png", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);

  7. DWORD dwStatusCode;
  8. httpFile->QueryInfoStatusCode(dwStatusCode);

  9. if(dwStatusCode == HTTP_STATUS_OK) {
  10. int size=0;
  11. do {
  12. size = httpFile->Read(buff,1024); // 读取图片
  13. imgFile.Write(buff,size);
  14. }while(size > 0);
  15. }

  16. httpFile->Close();
  17. session.Close();


获取URL的html

[cpp] view plain​ copy


  1. CInternetSession session;
  2. CHttpFile *httpFile = (CHttpFile *)session.OpenURL(m_URL);

  3. DWORD dwStatusCode;
  4. httpFile->QueryInfoStatusCode(dwStatusCode);

  5. CString getdata=_T("");

  6. if(dwStatusCode == HTTP_STATUS_OK) {
  7. CString line_data=_T("");
  8. while(httpFile->ReadString(line_data)) {
  9. getdata += line_data; // 读取html
  10. }
  11. getdata.TrimRight();
  12. }

  13. httpFile->Close(); // html数据已经放在getdata中
  14. session.Close();

  15. // 如果 getdata 中保存的是UTF_8网页(可以看html的meta字段)

  16. strCoding cfm; // 编码转换类,详情请看下方连接

  17. string temp = (LPCSTR)getdata.GetBuffer(); // 网页数据,转换成string型
  18. string output;
  19. // UTF_8转GB2312,让MFC控件能显示
  20. cfm.UTF_8ToGB2312(output,(char *)temp.data(),strlen(temp.data()));

  21. // 若MFC字符集为Unicode的话,还需要将多字节转为宽字节
  22. temp = output;
  23. DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, temp.c_str(), -1, NULL, 0);
  24. wchar_t *pwText;
  25. pwText = new wchar_t[dwNum];
  26. MultiByteToWideChar (CP_ACP, 0, temp.c_str(), -1, pwText, dwNum);

  27. // 取得转换后结果 m_data 用于显示
  28. m_data = pwText;
  29. delete []pwText;



​//下载文件并保存为新文件名​​ ​​#include <afx.h>​​ ​​#include <afxinet.h>​​ ​​#define RECVPACK_SIZE 2048​​ ​​bool​​​​DownloadSaveFiles(​​​​char​​​​* url,​​​​char​​​​*strSaveFile) {​​​​//下载文件并保存为新文件名​​ ​​ ​​​​bool​​​​ret=​​​​false​​​​;​​ ​​ ​​​​CInternetSession Sess(​​​​"lpload"​​​​);​​ ​​ ​​​​Sess.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT , 2000); ​​​​//2秒的连接超时​​ ​​ ​​​​Sess.SetOption(INTERNET_OPTION_SEND_TIMEOUT , 2000); ​​​​//2秒的发送超时​​ ​​ ​​​​Sess.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT , 2000); ​​​​//2秒的接收超时​​ ​​ ​​​​Sess.SetOption(INTERNET_OPTION_DATA_SEND_TIMEOUT , 2000); ​​​​//2秒的发送超时​​ ​​ ​​​​Sess.SetOption(INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, 2000); ​​​​//2秒的接收超时​​ ​​ ​​​​DWORD​​​​dwFlag = INTERNET_FLAG_TRANSFER_BINARY|INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_RELOAD ;​​ ​​ ​​​​CHttpFile* cFile = NULL;​​ ​​ ​​​​char​​​​*pBuf = NULL;​​ ​​ ​​​​int​​​​nBufLen = 0 ;​​ ​​ ​​​​do​​​​{​​ ​​ ​​​​try​​​​{​​ ​​ ​​​​cFile = (CHttpFile*)Sess.OpenURL(url,1,dwFlag);​​ ​​ ​​​​DWORD​​​​dwStatusCode;​​ ​​ ​​​​cFile->QueryInfoStatusCode(dwStatusCode);​​ ​​ ​​​​if​​​​(dwStatusCode == HTTP_STATUS_OK) {​​ ​​ ​​​​//查询文件长度​​ ​​ ​​​​DWORD​​​​nLen=0;​​ ​​ ​​​​cFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH, nLen);​​ ​​ ​​​​//CString strFilename = GetFileName(url,TRUE);​​ ​​ ​​​​nBufLen=nLen;​​ ​​ ​​​​if​​​​(nLen <= 0) ​​​​break​​​​;​​​​//​​ ​​ ​​​​//分配接收数据缓存​​ ​​ ​​​​pBuf = (​​​​char​​​​*)​​​​malloc​​​​(nLen+8);​​ ​​ ​​​​ZeroMemory(pBuf,nLen+8);​​ ​​ ​​​​char​​​​*p=pBuf;​​ ​​ ​​​​while​​​​(nLen>0) {​​ ​​ ​​​​//每次下载8K​​ ​​ ​​​​int​​​​n = cFile->Read(p,(nLen<RECVPACK_SIZE)?nLen:RECVPACK_SIZE);​​ ​​ ​​​​//接收完成退出循环​​ ​​ ​​​​if​​​​(n <= 0) ​​​​break​​​​;​​​​//​​ ​​ ​​​​//接收缓存后移​​ ​​ ​​​​p+= n ;​​ ​​ ​​​​//剩余长度递减​​ ​​ ​​​​nLen -= n ;​​ ​​ ​​​​}​​ ​​ ​​​​//如果未接收完中断退出​​ ​​ ​​​​if​​​​(nLen != 0) ​​​​break​​​​;​​ ​​ ​​​​//接收成功保存到文件​​ ​​ ​​​​CFile file(strSaveFile, CFile::modeCreate | CFile::modeWrite);​​ ​​ ​​​​file.Write(pBuf,nBufLen);​​ ​​ ​​​​file.Close();​​ ​​ ​​​​ret = ​​​​true​​​​;​​ ​​ ​​​​}​​ ​​ ​​​​} ​​​​catch​​​​(...) {​​ ​​ ​​​​break​​​​;​​​​//​​ ​​ ​​​​}​​ ​​ ​​​​} ​​​​while​​​​(0);​​ ​​ ​​​​//释放缓存​​ ​​ ​​​​if​​​​(pBuf) {​​ ​​ ​​​​free​​​​(pBuf);​​ ​​ ​​​​pBuf=NULL;​​ ​​ ​​​​nBufLen = 0 ;​​ ​​ ​​​​}​​ ​​ ​​​​//关闭下载连接​​ ​​ ​​​​if​​​​(cFile) {​​ ​​ ​​​​cFile->Close();​​ ​​ ​​​​Sess.Close();​​ ​​ ​​​​delete​​​​cFile;​​ ​​ ​​​​}​​ ​​ ​​​​return​​​​ret;​​ ​​}​​ ​​int​​​​main() {​​ ​​ ​​​​DownloadSaveFiles(​​​​"http://www.nirsoft.net/utils/nircmd.zip"​​​​,​​​​"d:\\cppdld_nircmd.zip"​​​​);​​ ​​ ​​​​return​​​​0;​​ ​​}​