急! 使用wininet API 实现Http下载

hnyming   2009-8-16 14:49 楼主
刚刚接触Wince 6.0 现在要实现一个使用url链接下载的功能 ,参考了网上一些程序编写如下代码

  1. void CHttpGet::Download(CString url)
  2. {
  3.         try
  4.         {
  5. CStdioFile* pSFile=NULL;
  6. CInternetSession* m_pInetSession=new CInternetSession(NULL,1,INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);
  7. //打开URL文件,返回CStdioFile
  8. LPCTSTR curl=(LPCTSTR)url.GetBuffer(url.GetLength());
  9. pSFile = m_pInetSession->OpenURL(L"http://file1.top100.cn/200908161441/21CC5B00B81E9E38CDEBAF6D712FC7FC/Special_28186/%E6%B0%B4%E6%99%B6%E8%9C%BB%E8%9C%93.mp3");
  10. //缓冲区
  11. BYTE pBuf[1024] = {NULL};
  12. CFile pCFile = NULL;
  13. //创建本地文件
  14. pCFile.Open(_T("c:\"),CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
  15. //从缓冲区循环读取文数据
  16. while (int bytesread = pSFile->Read(pBuf,1024))
  17. {
  18.         //指针移到文件结尾
  19.         pCFile.SeekToEnd();
  20.         //将读取的缓冲区数据写入本地文件
  21.         pCFile.Write(pBuf,bytesread);
  22. }
  23. //关闭本地文件
  24. pCFile.Close();
  25. //关闭CStdioFile
  26. pSFile->Close();
  27. delete m_pInetSession;
  28. AfxMessageBox(L"Finish!  the directory is C:\",0,0);
  29. }
  30. catch(CInternetException* lpEx)
  31. {
  32. lpEx->ReportError();
  33. lpEx->Delete();
  34. AfxMessageBox(L"failed !",0,0);[code]
  35. }

编译通过了 在Debug时 发现调用OpenURL函数时出现“the server name or address could not be resolved”
跟踪到inet.cpp 发现是由于

  1. hOpener = InternetOpenUrl(m_hSession, pstrURL, pstrHeaders,dwHeadersLength, dwFlags, dwContext); //返回为0 造成的
一开始以为是我使用调用CString 类型的url造成的, 后来把类型转换成LPCSTR 还是不行
是不是还要把http数据包头补上?? 求各位高手指点~~

回复评论 (1)

换吧
前几天用wininet的FTP那些API,愣是没找到原因...
点赞  2009-8-20 14:59
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复