Перевод подпрограммы из VB6 в VB2005. Он загружает один текстовый файл через FTP с внутреннего сервера компании. Я использую этот код в VB6 уже много лет, и мне не приходилось предоставлять учетные данные прокси-сервера для обхода корпоративного брандмауэра, только учетные данные для доступа на FTP-сервер.
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
hconnection = InternetConnect(hOpen, HostURL, INTERNET_INVALID_PORT_NUMBER, user, PW, INTERNET_SERVICE_FTP, nFlag, 0)
DownloadFile = FtpGetFile(hconnection, File$, TargetPathFile$, False, INTERNET_FLAG_RELOAD, FTP_TRANSFER_TYPE_ASCII, 0)
В VB2005 я использую
Dim reqFTP As FtpWebRequest = Nothing
Dim ftpStream As Stream = Nothing
Dim outPathAndFile As String = My.Computer.FileSystem.CombinePath(TargetPath, HostFileName)
Dim outputStream As New FileStream(outPathAndFile, FileMode.Create)
reqFTP = DirectCast(FtpWebRequest.Create(New Uri("ftp://" + HostURL + "/" + HostFileName)), FtpWebRequest)
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile
reqFTP.UseBinary = False 'True if binary file, False if ASCII text file
reqFTP.Credentials = New NetworkCredential(id, pw)
Dim response As FtpWebResponse = DirectCast(reqFTP.GetResponse(), FtpWebResponse)
ftpStream = response.GetResponseStream()
Dim cl As Long = response.ContentLength
Dim bufferSize As Integer = 2048
Dim readCount As Integer
Dim buffer As Byte() = New Byte(bufferSize - 1) {}
readCount = ftpStream.Read(buffer, 0, bufferSize)
While readCount > 0
outputStream.Write(buffer, 0, readCount)
readCount = ftpStream.Read(buffer, 0, bufferSize)
End While
В reqFTP.GetResponse выдается ошибка: «Удаленный сервер возвратил ошибку. (407) Требуется проверка подлинности прокси». Я просто не могу понять, почему в моем старом коде мне никогда не приходилось предоставлять прокси-сервер, а в новом коде кажется, что он этого требует. Я пробовал ручное соединение через WS_FTP, и оно не требует прокси, поэтому я должен что-то делать не так, но не могу понять, что.