程序目的是透过SOCKS5代理服务器下载远程FTP上的文件。
使用以下代码链接SOCKS5代理,去下载FTP文件,当SOCKS5代理服务器不设密码时,理服务器收到SOCKS4的请求,并且能下载成功,但是当代理服务器设置密码,并用InternetSetOption()设置登录的用户名和密码,就不能设置成功,请高手看看呀,这是为什么?
HINTERNET hOpenHandle;
char strUsername[256], strPassword[256];
DWORD cchUserLength, cchPasswordLength;
char tmp[128];
strcpy(tmp,"SOCKS=");
strcat(tmp,this->m_ProxyHost);
strcat(tmp,":");
char szport[8];
itoa(this->m_nProxyPort,szport,10);
strcat(tmp,szport); hOpenHandle = InternetOpen("Example",
INTERNET_OPEN_TYPE_PROXY,
/*FProxyServer*/tmp, NULL, 0); strcpy(strUsername,this->m_ProxyUser);
cchUserLength = strlen(this->m_ProxyUser);
strcpy(strPassword,this->m_ProxyPass);
cchPasswordLength = strlen(this->m_ProxyPass);
BOOL sesult;
if (cchUserLength >0)
{
sesult = InternetSetOption(hOpenHandle,
INTERNET_OPTION_PROXY_USERNAME,
strUsername,
cchUserLength+1);
if (sesult !=TRUE )
{
int dd = GetLastError();
//FormatMessage ();
}
}
if (cchPasswordLength>0)
{
sesult = InternetSetOption(hOpenHandle,
INTERNET_OPTION_PROXY_PASSWORD,
strPassword,
cchPasswordLength+1);
if (!sesult)
{
int dwErrorCode = GetLastError();
}
}
HINTERNET hConnectHandle = InternetConnect(hOpenHandle,
ipAddr,port,username,password,
INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0);
int ret = FtpGetFile(hConnectHandle,reqFileNames,localFilePath,
0,FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_BINARY |
INTERNET_FLAG_NO_CACHE_WRITE,0);
使用以下代码链接SOCKS5代理,去下载FTP文件,当SOCKS5代理服务器不设密码时,理服务器收到SOCKS4的请求,并且能下载成功,但是当代理服务器设置密码,并用InternetSetOption()设置登录的用户名和密码,就不能设置成功,请高手看看呀,这是为什么?
HINTERNET hOpenHandle;
char strUsername[256], strPassword[256];
DWORD cchUserLength, cchPasswordLength;
char tmp[128];
strcpy(tmp,"SOCKS=");
strcat(tmp,this->m_ProxyHost);
strcat(tmp,":");
char szport[8];
itoa(this->m_nProxyPort,szport,10);
strcat(tmp,szport); hOpenHandle = InternetOpen("Example",
INTERNET_OPEN_TYPE_PROXY,
/*FProxyServer*/tmp, NULL, 0); strcpy(strUsername,this->m_ProxyUser);
cchUserLength = strlen(this->m_ProxyUser);
strcpy(strPassword,this->m_ProxyPass);
cchPasswordLength = strlen(this->m_ProxyPass);
BOOL sesult;
if (cchUserLength >0)
{
sesult = InternetSetOption(hOpenHandle,
INTERNET_OPTION_PROXY_USERNAME,
strUsername,
cchUserLength+1);
if (sesult !=TRUE )
{
int dd = GetLastError();
//FormatMessage ();
}
}
if (cchPasswordLength>0)
{
sesult = InternetSetOption(hOpenHandle,
INTERNET_OPTION_PROXY_PASSWORD,
strPassword,
cchPasswordLength+1);
if (!sesult)
{
int dwErrorCode = GetLastError();
}
}
HINTERNET hConnectHandle = InternetConnect(hOpenHandle,
ipAddr,port,username,password,
INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0);
int ret = FtpGetFile(hConnectHandle,reqFileNames,localFilePath,
0,FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_BINARY |
INTERNET_FLAG_NO_CACHE_WRITE,0);
你可以看看这个帖子
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=929937&SiteID=1
I've mostly tried 了。
原来windows的api本来就不支持。
该死的微软。