Internet Connect无法通过FTP代理连接到FTP服务器

InternetConnect fails to connect to FTP server via ftp proxy

本文关键字:FTP 代理 连接 服务器 Connect Internet      更新时间:2023-10-16

我正在尝试使用Wingate FTP代理连接到FTP服务器。在所有情况下,InternetOpen()将成功返回适当的手柄。

在情况代理身份验证范围内 ,InternetConnect()返回适当的手柄,我可以继续进行进一步的FTP操作,但是在的情况下,Internet Conconnect()returns returns在上进行了身份验证null。

在MSDN上,他们提到了代理使用Internet_option_proxy_username和Internet_option_proxy_password标志来设置由Internet Connect返回的句柄上的Proxy用户名和密码,但是它是返回的null和Printing GetLastRorRor(我会在返回getLastror()上,我会在Internet Connect上设置代理用户名和密码:
Internet Connect失败:12014

220 Wingate Engine FTP网关准备就绪

331发送密码

530 auth失败

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;

任何帮助将不胜感激。预先感谢。

问题是您要连接到FTP代理,而不是HTTP代理。因此,您将获得FTP欢迎字符串。

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

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