windows xp sp3 + ie6环境
如何在CInternetSession下传文件时,设置要求用户名口令的代理服务器?
如果安装了ie8,CInternetSession会自动采用ie的设置和用户保存的凭据,程序是完全透明的,但ie6下,相同的程序行为不同了,如何显式地设置代理服务器与用户名口令呢?
下面是我目前不能工作的代码,这个代码在ie8的环境里完全不必有SetOption()的动作都能自动正常。
如何实现代理服务器的设置?
如何在CInternetSession下传文件时,设置要求用户名口令的代理服务器?
如果安装了ie8,CInternetSession会自动采用ie的设置和用户保存的凭据,程序是完全透明的,但ie6下,相同的程序行为不同了,如何显式地设置代理服务器与用户名口令呢?
下面是我目前不能工作的代码,这个代码在ie8的环境里完全不必有SetOption()的动作都能自动正常。
如何实现代理服务器的设置?
BOOL GetHttpFile(LPCTSTR psUrl, LPCTSTR psLocalFile, CString &sErrMg)
{
//通过http获得远程的update文件。
char buf[65536];
CString sTemp;
CInternetSession sess;
char* sProxyServer = _T("http://192.168.1.9:8080");
char* sProxyUserName = _T("bejlife\\username");
char* sProxyPassword = _T("Password");
INTERNET_PROXY_INFO proxyinfo;
proxyinfo.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
proxyinfo.lpszProxy = sProxyServer;
proxyinfo.lpszProxyBypass = NULL;
bool b = sess.SetOption(INTERNET_OPTION_PROXY, (LPVOID)&proxyinfo, sizeof(INTERNET_PROXY_INFO), 0);
CHttpFile* fileGet;
try
{
fileGet=(CHttpFile*)sess.OpenURL(psUrl); //, 1, INTERNET_FLAG_TRANSFER_BINARY);
if(!fileGet)
{
sess.Close();
sErrMg = "不能打开远程文件!";
return FALSE;
}
fileGet->SetOption(INTERNET_OPTION_PROXY_USERNAME, (LPVOID)sProxyUserName, lstrlen(sProxyUserName) + 1, 0);
fileGet->SetOption(INTERNET_OPTION_PROXY_PASSWORD, (LPVOID)sProxyPassword, lstrlen(sProxyPassword) + 1, 0);
}
catch(CException* e)
{
fileGet = NULL;
}
if(!fileGet)
{
sess.Close();
sErrMg = "不能找到远程文件!";
return FALSE;
}
int iBuffLen;
DWORD dwStatus;
DWORD dwBuffLen = sizeof(dwStatus);
BOOL bSuccess = fileGet->QueryInfo(HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, &dwStatus, &dwBuffLen);
if(!( bSuccess && dwStatus>= 200&& dwStatus<300 ))
{
fileGet->Close();
sess.Close();
delete fileGet;
sErrMg.Format("打开远程文件出错,错误码:%d", dwStatus);
return FALSE;
}
CFile fileWrite;
if( ! fileWrite.Open(psLocalFile, CFile::modeWrite|CFile::modeCreate))
{
fileGet->Close();
sess.Close();
delete fileGet;
sErrMg.Format("本地文件打开出错.");
return FALSE;
}
iBuffLen = fileGet->Read((void*)buf, sizeof(buf));
while(iBuffLen != 0)
{
fileWrite.Write(buf, iBuffLen);
iBuffLen = fileGet->Read((void*)buf, sizeof(buf));
}
fileWrite.Close();
fileGet->Close();
sess.Close();
delete fileGet;
sErrMg.Format("下载成功");
return TRUE;
{
//通过http获得远程的update文件。
char buf[65536];
CString sTemp;
CInternetSession sess;
char* sProxyServer = _T("http://192.168.1.9:8080");
char* sProxyUserName = _T("bejlife\\username");
char* sProxyPassword = _T("Password");
INTERNET_PROXY_INFO proxyinfo;
proxyinfo.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
proxyinfo.lpszProxy = sProxyServer;
proxyinfo.lpszProxyBypass = NULL;
bool b = sess.SetOption(INTERNET_OPTION_PROXY, (LPVOID)&proxyinfo, sizeof(INTERNET_PROXY_INFO), 0);
CHttpFile* fileGet;
try
{
fileGet=(CHttpFile*)sess.OpenURL(psUrl); //, 1, INTERNET_FLAG_TRANSFER_BINARY);
if(!fileGet)
{
sess.Close();
sErrMg = "不能打开远程文件!";
return FALSE;
}
fileGet->SetOption(INTERNET_OPTION_PROXY_USERNAME, (LPVOID)sProxyUserName, lstrlen(sProxyUserName) + 1, 0);
fileGet->SetOption(INTERNET_OPTION_PROXY_PASSWORD, (LPVOID)sProxyPassword, lstrlen(sProxyPassword) + 1, 0);
}
catch(CException* e)
{
fileGet = NULL;
}
if(!fileGet)
{
sess.Close();
sErrMg = "不能找到远程文件!";
return FALSE;
}
int iBuffLen;
DWORD dwStatus;
DWORD dwBuffLen = sizeof(dwStatus);
BOOL bSuccess = fileGet->QueryInfo(HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, &dwStatus, &dwBuffLen);
if(!( bSuccess && dwStatus>= 200&& dwStatus<300 ))
{
fileGet->Close();
sess.Close();
delete fileGet;
sErrMg.Format("打开远程文件出错,错误码:%d", dwStatus);
return FALSE;
}
CFile fileWrite;
if( ! fileWrite.Open(psLocalFile, CFile::modeWrite|CFile::modeCreate))
{
fileGet->Close();
sess.Close();
delete fileGet;
sErrMg.Format("本地文件打开出错.");
return FALSE;
}
iBuffLen = fileGet->Read((void*)buf, sizeof(buf));
while(iBuffLen != 0)
{
fileWrite.Write(buf, iBuffLen);
iBuffLen = fileGet->Read((void*)buf, sizeof(buf));
}
fileWrite.Close();
fileGet->Close();
sess.Close();
delete fileGet;
sErrMg.Format("下载成功");
return TRUE;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架