gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:46:29 25 4
gpt4 key购买 nike

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

如果代理身份验证关闭,InternetConnect() 返回正确的句柄,我可以继续进行进一步的 ftp 操作,但如果代理身份验证打开,InternetConnect() 返回空值。

在 MSDN 上,他们提到代理使用带有 INTERNET_OPTION_PROXY_USERNAME 和 INTERNET_OPTION_PROXY_PASSWORD 标志的 InternetSetOption() 来设置 InternetConnect 返回的句柄上的代理用户名和密码,但它返回 NULL 并且在打印 GetLastError() 时,我收到以下消息:
InternetConnect 失败:12014

220 WinGate 引擎 FTP 网关就绪

331发送密码

530 认证失败

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 完成。客户端向 HTTP 代理发出 HTTP 请求以获取 FTP URL。 HTTP 代理充当 FTP 服务器的 FTP 客户端,并将响应转换回客户端的 HTTP。奇怪但真实。

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

关于c++ - InternetConnect 无法通过 ftp 代理连接到 FTP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21426293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com