有关CInternetSession的问题

Gao_TF 2007-08-20 03:36:30
各位大侠,在下是网络新手,我的问题是这样的:
我想通过CInternetSession建立一会话,设置好代理,然后访问网页,并将其保存在本地硬盘.代码如下:

BOOL CTest2View::GetSourceHtml(CString theUrl,CString Filename)
{
CInternetSession session;

CInternetFile* file = NULL;
try
{
INTERNET_PROXY_INFO ipi;
ipi.dwAccessType=INTERNET_OPEN_TYPE_PROXY;
ipi.lpszProxy="http://192.168.19.9:8080";
ipi.lpszProxyBypass=NULL;
if(!session.SetOption (INTERNET_OPTION_PROXY,&ipi,sizeof(ipi),0))
//if(!session.SetOption (INTERNET_OPEN_TYPE_PROXY,&ipi,sizeof(ipi),0))
{
return FALSE;
}
// 试着连接到指定URL
//file = (CInternetFile*) session.OpenURL(theUrl);
file = (CInternetFile*) session.OpenURL(theUrl,1,INTERNET_FLAG_TRANSFER_ASCII|INTERNET_FLAG_RELOAD);
}
catch (CInternetException* m_pException)
{
// 如果有错误的话,置文件为空
file = NULL;
m_pException->Delete();
return FALSE;
}

// 用dataStore来保存读取的网页文件
CStdioFile dataStore;
if (file)
{
CString somecode; //也可采用LPTSTR类型,将不会删除文本中的\n回车符
//BOOL bIsOk = dataStore.Open(strPath+"\\"+Filename,
BOOL bIsOk = dataStore.Open(Filename,
CFile::modeCreate
| CFile::modeWrite
| CFile::shareDenyWrite
| CFile::typeText);

if (!bIsOk)
return FALSE;

// 读写网页文件,直到为空
while (file->ReadString(somecode) != NULL) //如果采用LPTSTR类型,读取最大个数nMax置0,使它遇空字符时结束
{
dataStore.WriteString(somecode);
dataStore.WriteString("\n"); //如果somecode采用LPTSTR类型,可不用此句
}

file->Close();
delete file;
}
else
{
dataStore.WriteString(_T("到指定服务器的连接建立失败..."));
return FALSE;
}
return TRUE;
}

在这里,如果我设置了ipi.lpszProxy="http://192.168.19.9:8080";则程序在session.OpenURL那句就再也执行不下去了,不知道为什么!
如果我不设置后面的端口,如同这样pi.lpszProxy="http://192.168.19.9"
那么能够执行到完成,但我看我保存的网页却是这样的:
"
无法显示此页
解释: 尝试访问的页面出现问题,无法显示该页面。
尝试下列:
刷新页: 单击“刷新”按钮来再次搜索此页。超时可能是由于 Internet 拥塞造成的。
检查拼写: 请检查您是否正确键入了网页地址。键入的网页地址不正确。
从链接访问: 如果有一个到您正在找的网页的链接,请尝试从该链接访问此页。
技术信息(提供给支持人员)
错误代码: 403 Forbidden。The ISA Server denied the specified Uniform Resource Locator (URL). (12202)
"
请各位帮帮忙吧!多谢多谢了!阿包在此作揖了
...全文
524 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gao_TF 2007-08-21
  • 打赏
  • 举报
回复
自己顶一下
Gao_TF 2007-08-20
  • 打赏
  • 举报
回复
各位大侠,帮忙看看,多谢多谢
Gao_TF 2007-08-20
  • 打赏
  • 举报
回复
但它为何不能向下执行呢?为何停在这里呢session.OpenURL(theUrl,1,INTERNET_FLAG_TRANSFER_ASCII|INTERNET_FLAG_RELOAD);?
不加端口跟默认80应该是一样的吧?
那我读取不正确是不是因为端口不是我代理服务器的端口的原因呢?
qiangv 2007-08-20
  • 打赏
  • 举报
回复
我没试过不是默认80的情况~~
不过感觉应该没问题。
Gao_TF 2007-08-20
  • 打赏
  • 举报
回复
自己顶一下:
我的端口的确是8080,但为何我加上它就在session.OpenURL(theUrl,1,INTERNET_FLAG_TRANSFER_ASCII|INTERNET_FLAG_RELOAD);
这句就不能执行了那?

如果不加端口,那为何我保存的文件不正确呢?(通过浏览器访问该网址是顺理的)
Gao_TF 2007-08-20
  • 打赏
  • 举报
回复
to:qiangv(专业顶贴,只问不答) ( 四级(中级))
我刚试过那个例子了,但问题依旧啊!!
qiangv 2007-08-20
  • 打赏
  • 举报
回复
http://www.itmancn.com/Technology/200708/175.html

18,355

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧