2014-01-29 342 views
2

我嘗試使用WinGate FTP代理連接到FTP服務器。 InternetOpen()在所有情況下都成功執行返回適當的句柄。InternetConnect無法通過FTP代理連接到FTP服務器

如果代理驗證關,InternetConnect()返回正確的句柄,我可以用另外的FTP操作繼續進行,但萬一代理驗證是在,InternetConnect()返回NULL。

MSDN上,他們都提到了代理使用InternetSetOption()與INTERNET_OPTION_PROXY_USERNAME和INTERNET_OPTION_PROXY_PASSWORD標誌設置由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; 

任何幫助表示讚賞。 在此先感謝。

回答

2

問題是您正在連接到FTP代理,而不是HTTP代理。所以你會得到一個FTP歡迎字符串。

使用WinInet通過代理進行工作時,FTP通過HTTP完成。客戶端向HTTP代理髮送HTTP請求以獲取FTP URL。 HTTP代理充當FTP服務器的FTP客戶端,並將響應轉換回客戶端的HTTP。奇怪而真實。

因此,您需要將代理端口更改爲WinGate中的HTTP代理。