zoukankan      html  css  js  c++  java
  • 求高手指点:VC中wininet的代理服务器问题,耗了两天了,没有一点办法

    windows xp sp3 + ie6环境

    如何在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) + 10);
            fileGet->SetOption(INTERNET_OPTION_PROXY_PASSWORD, (LPVOID)sProxyPassword, lstrlen(sProxyPassword) + 10);
        }
        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;

  • 相关阅读:
    window环境搭建contos 7,而后xshell链接
    .NET Core 学习笔记(二)之启动流程
    .Net Core 学习笔记(一)
    Redis入门指南(附网盘下载链接)
    结构化数据、半结构化数据和非结构化数据
    github上项目的目录结构说明
    数据库分库分表和带来的唯一ID、分页查询问题的解决
    博客目录
    14 SQLAlchemy
    13 Msql之四种事务隔离界别
  • 原文地址:https://www.cnblogs.com/haoxiaobo/p/2315722.html
Copyright © 2011-2022 走看看