【发布时间】:2023-03-22 09:35:01
【问题描述】:
我正在尝试使用 WinGate FTP 代理连接到 FTP 服务器。 InternetOpen() 在所有情况下都成功执行并返回适当的句柄。
如果 Proxy Authentication 关闭,InternetConnect() 返回正确的句柄,我可以继续进行进一步的 ftp 操作,但如果 Proxy Authentication 关闭,InternetConnect() 返回空。
在 MSDN 上,他们提到的代理使用带有 INTERNET_OPTION_PROXY_USERNAME 和 INTERNET_OPTION_PROXY_PASSWORD 标志的 InternetSetOption() 在 InternetConnect 返回的句柄上设置代理用户名和密码,但它返回 NULL 并且在打印 GetLastError() 时,我收到以下消息:
InternetConnect 失败:12014
220 WinGate Engine 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;
感谢任何帮助。 提前致谢。
【问题讨论】: