首页 文章

InternetConnect无法通过ftp代理连接到FTP服务器

提问于
浏览
2

我正在尝试使用WinGate FTP代理连接到FTP服务器 . InternetOpen()在所有情况下都成功返回适当的句柄 .

Proxy Authentication is OFF 的情况下,InternetConnect()返回正确的句柄,我可以继续进行进一步的ftp操作,但是在 Proxy Authentication is ON 的情况下,InternetConnect()返回NULL .

在MSDN上,他们提到代理使用InternetSetOption()和INTERNET_OPTION_PROXY_USERNAME以及INTERNET_OPTION_PROXY_PASSWORD标志来设置InternetConnect返回的句柄上的代理用户名和密码,但是它返回NULL并且在打印GetLastError()时,我得到以下消息:
InternetConnect failed: 12014
220 WinGate Engine FTP Gateway ready 331 send password
530 Auth Failed

if ((hHandle=InternetOpen("Upload", INTERNET_OPEN_TYPE_PROXY, "ftp=ftp://<servername>:<port>", NULL, 0)) == NULL)
    {
        printf("InternetOpen failed: %d", GetLastError());
        printInternetErrorMsg(function);
        return false;   
    }   
    char buffer[1024];
    string proxy_username,proxy_password;
    // get ftp proxy username and password
            // ..


    if ((m_itConnect=InternetConnect(hHandle, ftpserver, INTERNET_DEFAULT_FTP_PORT, ftpusrname, ftppasswd, INTERNET_SERVICE_FTP, NULL, NULL)) == NULL){
        printf("InternetConnect failed: %d", GetLastError());
        printInternetErrorMsg(function);
                    //Internet Connect Fails with following error when Proxy Authentication is ON
                    //InternetConnect failed: 12014
                    //220 WinGate Engine FTP Gateway ready
                    //331 send password
                    //530 Auth Failed 

        return false;           
    }
    strcpy(buffer,proxy_username.c_str());

    if ( !InternetSetOption (m_itConnect, INTERNET_OPTION_PROXY_USERNAME, (LPVOID) buffer, lstrlen (buffer) ))
    {
        printf("Unable to set proxy authetication settings (username). Error returned: %d",  GetLastError() );
        return false;
    }

    strcpy(buffer, proxy_password.c_str());

    if ( !InternetSetOption (m_itConnect, INTERNET_OPTION_PROXY_PASSWORD, (LPVOID) buffer, lstrlen (buffer) ))
    {
        printf("Unable to set proxy authetication settings (password). Error returned: %d",  GetLastError() );
        return false;
    }
}


printf("InternetConnect successful ...");
return true;

任何帮助表示赞赏 . 提前致谢 .

1 回答

  • 2

    问题是您要连接到FTP代理,而不是HTTP代理 . 所以你得到一个FTP欢迎字符串 .

    使用WinInet通过代理工作时,FTP是通过HTTP完成的 . 客户端向HTTP代理发出HTTP URL请求 . HTTP代理充当FTP服务器的FTP客户端,并将响应转换回客户端的HTTP . 奇怪但真实 .

    因此,您需要将代理端口更改为WinGate中的HTTP代理 .

相关问题