2014-01-29 3 views
2

Я пытаюсь подключиться к FTP-серверу с помощью WinGate FTP Proxy. InternetOpen() успешно выполняет соответствующий дескриптор во всех случаях.InternetConnect не удается подключиться к FTP-серверу через ftp-прокси

В случае Proxy Authentication выключен, InternetConnect() возвращает правильную ручку, и я могу продолжить дальнейшие фтп операций, но в случае Proxy Authentication включен, InternetConnect() возвращает NULL.

На MSDN они упоминаются прокси использовать InternetSetOption() с INTERNET_OPTION_PROXY_USERNAME и INTERNET_OPTION_PROXY_PASSWORD флагами, чтобы установить прокси-имя пользователя и пароль на ручке возвращенного InternetConnect, но это возвращение NULL и на печать GetLastError(), я получаю следующее сообщение:
InternetConnect не удалось: 12014

220 WinGate Двигатель FTP шлюз готов

331 отправить пароль

530 Au й Failed

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; 

Любая помощь приветствуется. Спасибо заранее.

ответ

2

проблема заключается в том, что вы подключаетесь к FTP-прокси, а не к прокси-серверу HTTP. Таким образом, вы получаете строку приветствия FTP.

При работе через прокси-сервер с использованием WinInet FTP выполняется через HTTP. Клиент делает HTTP-запрос HTTP-прокси для URL-адреса FTP. HTTP-прокси действует как FTP-клиент на FTP-сервер и переводит ответ обратно в HTTP для клиента. Удивительно, но факт.

Таким образом, вам нужно изменить порт прокси, чтобы быть прокси-сервером HTTP в WinGate.

Смежные вопросы