CInternetSession获取网页内容的问题

Adyanced 2005-10-13 03:45:58
用CInternetSession类编了一段程序,想要获得网页内容。调试时同时打开IE比较获取的网页内容,发现,有时候在网页内容更新以后,我的程序没法获得最新的网页,一定要在IE中刷新一下,才能取得最新内容,否则就还是原来的。怀疑我的程序读了cache里的内容,就尝试使用INTERNET_FLAG_DONT_CACHE选项,但还是一样。请诸位大侠指教,程序如下
try {
CInternetSession m_Session ("Microsoft Internet Browser",0);
CHttpFile* m_HttpFile = NULL;

m_Session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,1000);
m_Session.SetOption(INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, 1000);
m_Session.SetOption(INTERNET_OPTION_DATA_SEND_TIMEOUT, 1000);
m_Session.SetOption(INTERNET_OPTION_CONNECT_BACKOFF,1000);
m_Session.SetOption(INTERNET_OPTION_CONNECT_RETRIES,2);

m_HttpFile = (CHttpFile*)m_Session.OpenURL(m_URL);
// m_HttpFile = (CHttpFile*)m_Session.OpenURL(m_URL,1,
// INTERNET_FLAG_TRANSFER_ASCII | INTERNET_FLAG_EXISTING_CONNECT |
// INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_DONT_CACHE, NULL,0);

DWORD dwStatusCode;
CString siteInfo;

m_HttpFile->QueryInfoStatusCode(dwStatusCode);
if (dwStatusCode != 200) { // 网页不存在
return " 网页不存在! ";
}

CString myData;
while(m_HttpFile->ReadString(myData)) {
.
.
.
}

m_HttpFile->Close();
m_Session.Close();
}
catch (CInternetException* pEx) {
pEx->Delete();
return " 致命错误! ";
}
...全文
274 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Adyanced 2005-10-14
用GetHttpConnection的方式重新写了程序,不过这次我指定了使用INTERNET_FLAG_RELOAD,目前运行情况良好。没做试验,所以也不知道是因为换了个方法还是因为指定了INTERNET_FLAG_RELOAD。不过还是要感谢,又没有其他人答复(本来回复就给分),所以分全给你了。
回复
Atry 2005-10-13
其实真正的王道就在于此,用这些函数,可以非常轻松的做到Cookie欺骗、修改HTTP头的引用字段等等,简直爽死了。哪像一个OpenURL干瘪瘪的
回复
Atry 2005-10-13
有两个办法,第一个办法,就像你现在看到的CSDN一样,加随机参数,比如说我们这个网页是http://community.csdn.net/Expert/topic/4324/4324348.xml?temp=.9382288
这个?temp=.9382288是随机生成防止使用Cache的。

第二个办法,不使用包装好的OpenURL,改用CInternetSession::GetHttpConnection、CHttpConnection::OpenRequest等几个函数:
下表显示在典型 HTTP 客户端应用程序中可能执行的步骤:

目标 采取的操作 效果
开始 HTTP 会话。 创建 CInternetSession 对象。 初始化 WinInet 并连接到服务器。
连接到 HTTP 服务器。 使用 CInternetSession::GetHttpConnection。 返回 CHttpConnection 对象。
打开 HTTP 请求。 使用 CHttpConnection::OpenRequest。 返回 CHttpFile 对象。
发送 HTTP 请求。 使用 CHttpFile::AddRequestHeaders 和 CHttpFile::SendRequest。 查找文件。如果没有找到该文件,则返回 FALSE。
从文件中读取。 使用 CHttpFile。 使用您提供的缓冲区读取指定数目的字节。
处理异常。 使用 CInternetException 类。 处理所有常见的 Internet 异常类型。
结束 HTTP 会话。 处置 CInternetSession 对象。 自动清理打开的文件句柄和连接。
回复
相关推荐
发帖
网络编程
创建于2007-09-28

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2005-10-13 03:45
社区公告
暂无公告