Résolu !! Client FTP avec proxy: API WinInet [VC] - C++ - Programmation
Marsh Posté le 10-06-2002 à 16:08:04
c bon j'ai trouvé, c uniquement que je ne mettais pas "ftp://" devantl'adresse du proxy que je passais en param.. chui dégoûté d'avoir passé autant de temps et cheché si loin l'erreur, m'enfin...
Marsh Posté le 10-06-2002 à 14:39:33
j'ai vu dans les MSDNs que les API Wininet (avec les structure InternetSession et fonction GetFTpConnection) ne permettent pas de se connecter à un serveur FTP via un proxy de type CERN mais qu'il fallait à la place utiliser les foncs. "OpenURL()" et ce genre de chose car les proxies CERN dispatchent tout en format html (le retour HTML doit-être éventuellement parsé pour le contenu d'un répertoire FTP, etc...) mais de toute manière un proxy de type CERN ne permet pas d'uploader des fichiers. Pour cela il faut soit un accès direct u serveur FTP (sans proxy) soit un accès avec proxy de type TIS. Alors voilà j'ai installé Proxy+ qui me semble-t-il (d'après ce que j'ai lu dans les docs) supporte la fonction "passerelle FTP" et donc àpriori devrai permettre d'uploader sur des serveur FTP (c donc un proxy de type TIS), preuve en est que certains clients FTP comme CuteFTP permettent d'uploader des fichiers sur des serveurs FTP en passant par Proxy+ ...
il y a plusieurs choses qui m'échappent:
1) à quoi sert l'activation de l'option "type de connection" = "USER user@site" dans CuteFTP (qui est nécessaire pour la connection au serveur FTP par l'intermédiaire de proxy+. Jene voi pas d'équivalent à cette option dans les API WinInet...
Pour ma part voici le cde correspondant à ma connection:
"
try {
m_pInternetSession = new CInternetSession("NTV FTP ActiveX Client", 1, INTERNET_OPEN_TYPE_PROXY, ProxyName);
catch( CInternetException* MyE ) {
TCHAR szErrorMessage[ErrorMaxLength - 100];
MyE->GetErrorMessage(szErrorMessage, ErrorMaxLength - 100);
Msg(Error, "Connect: Cannot create Internet Session: %s, Error code = 0x%x", szErrorMessage, MyE->m_dwError);
MyE->Delete();
m_pInternetSession = NULL;
return E_FAIL;
}
if((ProxyLogin)&&(strcmp(ProxyLogin,"0" ))) {
HRESULT rval;
LI_ERROR(m_pInternetSession->SetOption(INTERNET_OPTION_PROXY_USERNAME, (void*)ProxyLogin, strlen(Login)));
if(rval == FALSE) {
CloseConnect();
//strcpy(Error, "Connect: Cannot set Login for proxy" );
return E_FAIL;
}
}
if((ProxyPassword)&&(strcmp(ProxyPassword,"0" ))) {
HRESULT rval;
LI_ERROR(m_pInternetSession->SetOption(INTERNET_OPTION_PROXY_PASSWORD, (void*)ProxyPassword, strlen(Password)));
if(rval == FALSE) {
CloseConnect();
//strcpy(Error, "Connect: Cannot set Password for proxy" );
return E_FAIL;
}
}
try { m_pFtpConnection = m_pInternetSession->GetFtpConnection(ServerName, Login, Password, Port, Passive); }
catch( CInternetException* MyE ) {
TCHAR szErrorMessage[ErrorMaxLength - 100];
MyE->GetErrorMessage(szErrorMessage, ErrorMaxLength - 100);
Msg(Error, "Connect: Cannot connect to ftp server: %s, Error code = 0x%x", szErrorMessage, MyE->m_dwError);
MyE->Delete();
m_pFtpConnection = NULL;
return E_FAIL;
}
"
j'obtiens systématiquement l'erreur "Connect: Cannot connect to ftp server: %s, Error code = 0x%x" (avec les %kkchose remplacés par leurs valeurs respectives). Pourtant j'ai correctement configuré IE avec le proxy et ça passe, IE peut accéder à un serveur FTP si je tape une adresse "ftp://..." mais l'accès sera en lecture seul (il utilise je pense l'API "OpenURL" ou équivalent), de même avec CuteFTP ça fonctionne bien si je configure le proxy avec le port spécifique à la passerelle FTP (4421 dans mon cas)... pourquoi mon prog ne fonctionne pas ? keski ne va pas dans mon code ? j'ai l'impression qu'il ne cherche même pas à passer par le proxy pour le FTP (pourtant la session internet se crée, ce qui implique que logiquement il soit déjà passé par le proxy)..
aidez-moi SVP j'y comprend rien et ça fait pas mal de temps que je cherche (j'ai rien trouvé sur les newsgroup). Merci beaucoup !
Message édité par ZZZzzz le 06-10-2002 à 16:08:33