FTP Скачать перевод с VB6 на VB2005 - нужен прокси? - PullRequest
0 голосов
/ 05 мая 2011

Перевод подпрограммы из 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, и оно не требует прокси, поэтому я должен что-то делать не так, но не могу понять, что.

1 Ответ

0 голосов
/ 20 октября 2011

Хорошо, пока я провел еще несколько исследований и нашел две вещи.Во-первых, если я добавил, что мне не нужен прокси-сервер, как показано ниже: reqFTP.Proxy = Nothing 'нет прокси-сервера для выхода из корпоративного брандмауэра, поскольку внутренний сервер разрешает мою проблему с прокси-сервером.После того, как прокси был разрешен, у меня возникла еще одна проблема с загрузкой с мэйнфрейма, которая в конце должна указывать мой путь и имя набора данных в виде [code] ftpSite // 'test.file2' [\ code].Однажды я сделал эти две вещи, они работают как шарм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...