很简单的一段代码
CInternetSession is;
CHttpFile *file = (CHttpFile*)is.OpenURL(url);
IE设置了代理,而且可以正常访问internet上的网页。同一个url,在IE和Chrome里面都可以访问,但是在代码里面就不能访问,返回 12029 (无法与服务器建立连接)。试了网上的各种办法都不好使。代码里面访问内网网页就没问题,但是就是访问不了外网页面。不知道要怎么设置proxy才行?在IE中设置了代理后,代码还需要设置么? 奇怪的是,代码有一段时间是可以运行的,但是后来怎么也不行了。

解决方案 »

  1.   


    CString  GeHttptFile(const char  *url ,char * Proxy,char *UseName, char * Password)      
    {      
        CString       szContent;      
        char       strProxyList[MAX_PATH],       strUsername[64],       strPassword[64];      
        //in       this       case       "proxya "       is       the       proxy       server       name,       "8080 "       is       its       port      
        strcpy(strProxyList,Proxy);      
        strcpy(strUsername,UseName);      
        strcpy(strPassword,Password);      
        DWORD       dwServiceType       =       AFX_INET_SERVICE_HTTP;      
        CString       szServer,       szObject;      
        INTERNET_PORT       nPort;      
        AfxParseURL(url,       dwServiceType,       szServer,       szObject,       nPort);      
        CInternetSession       mysession;      
        CHttpConnection*       pConnection;      
        CHttpFile*       pHttpFile;      
        pConnection       =       mysession.GetHttpConnection(szServer,      
        INTERNET_FLAG_KEEP_CONNECTION,      
        INTERNET_INVALID_PORT_NUMBER,      
        NULL,       NULL);      
        pHttpFile       =       pConnection-> OpenRequest( "POST",       szObject,      
            NULL,       0,       NULL,       NULL,      
            INTERNET_FLAG_KEEP_CONNECTION);      
        //here       for       proxy      
        INTERNET_PROXY_INFO       proxyinfo;      
        proxyinfo.dwAccessType       =       INTERNET_OPEN_TYPE_PROXY;      
        proxyinfo.lpszProxy       =       strProxyList;      
        proxyinfo.lpszProxyBypass       =       NULL;      
        mysession.SetOption(INTERNET_OPTION_PROXY,       (LPVOID)&proxyinfo,       sizeof(INTERNET_PROXY_INFO));      
        pHttpFile-> SetOption(INTERNET_OPTION_PROXY_USERNAME,       strUsername,       strlen(strUsername)+1);      
        pHttpFile-> SetOption(INTERNET_OPTION_PROXY_PASSWORD,       strPassword,       strlen(strPassword)+1);      
            
        pHttpFile-> SendRequest(NULL);      
        DWORD       nFileSize       =       pHttpFile-> GetLength();      
        LPSTR       rbuf       =       szContent.GetBuffer(nFileSize);      
        UINT       uBytesRead       =       pHttpFile-> Read(rbuf,       nFileSize);      
        szContent.ReleaseBuffer();      
        pHttpFile-> Close();      
        delete       pHttpFile;      
        pConnection-> Close();      
        delete       pConnection;      
        mysession.Close();      
        return       szContent;      

      

  2.   

    仅帮#1整理格式:CString GeHttptFile(const char *url ,char * Proxy,char *UseName, char * Password) {
        CString szContent;
        char strProxyList[MAX_PATH], strUsername[64], strPassword[64];
        //in this case "proxya " is the proxy server name, "8080 " is its port
        strcpy(strProxyList,Proxy);
        strcpy(strUsername,UseName);
        strcpy(strPassword,Password);
        DWORD dwServiceType = AFX_INET_SERVICE_HTTP;
        CString szServer, szObject;
        INTERNET_PORT nPort;
        AfxParseURL(url, dwServiceType, szServer, szObject, nPort);
        CInternetSession mysession;
        CHttpConnection* pConnection;
        CHttpFile* pHttpFile;
        pConnection = mysession.GetHttpConnection(szServer,
                      INTERNET_FLAG_KEEP_CONNECTION,
                      INTERNET_INVALID_PORT_NUMBER,
                      NULL, NULL);
        pHttpFile = pConnection-> OpenRequest( "POST", szObject,
                                               NULL, 0, NULL, NULL,
                                               INTERNET_FLAG_KEEP_CONNECTION);
        //here for proxy
        INTERNET_PROXY_INFO proxyinfo;
        proxyinfo.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
        proxyinfo.lpszProxy = strProxyList;
        proxyinfo.lpszProxyBypass = NULL;
        mysession.SetOption(INTERNET_OPTION_PROXY, (LPVOID)&proxyinfo, sizeof(INTERNET_PROXY_INFO));
        pHttpFile-> SetOption(INTERNET_OPTION_PROXY_USERNAME, strUsername, strlen(strUsername)+1);
        pHttpFile-> SetOption(INTERNET_OPTION_PROXY_PASSWORD, strPassword, strlen(strPassword)+1);    pHttpFile-> SendRequest(NULL);
        DWORD nFileSize = pHttpFile-> GetLength();
        LPSTR rbuf = szContent.GetBuffer(nFileSize);
        UINT uBytesRead = pHttpFile-> Read(rbuf, nFileSize);
        szContent.ReleaseBuffer();
        pHttpFile-> Close();
        delete pHttpFile;
        pConnection-> Close();
        delete pConnection;
        mysession.Close();
        return szContent;
    }