Что нового

[Сеть, интернет] InetGet не работает с ftp

Статус
Закрыто для дальнейших ответов.

moonshiner

Новичок
Сообщения
4
Репутация
0
Система Win 7 32

Пишу проект с массовой скачкой файлов по FTP с простой авторизацией.

Есть GUI с ProgressBar-ом

Главный вопрос: Необходимо показывать процесс скачивания.

Так как наилучший для этого вариант - InetGet, столкнулся с проблемой

Там где _FTP_FileGet забирает файлы без проблем, InetGet Не хочет ни в какую.


Вот собственно примеры:

Код:
$Open = _FTP_Open('FTP')
  $Conn = _FTP_Connect($Open, '192.168.137.33', 'User', 'Password', 1)
   _FTP_FileGet($Conn,'/download/test.txt','c:\test.txt')

Этот код работает.

Код:
InetGet('ftp://User:[email protected]/download/test.txt','c:\test.txt',1,1)

Этот код не работает, FTP Выдает 426 ошибку, предположительно както связанно с пассивным режимом (PASV на FTP включен)

Код:
ftp://User:[email protected]/download/test.txt
Если заходить через браузер, или эксплорер то этот адрес работает и FTP отдает файл
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
moonshiner,
Попробуйте
Код:
_FTP_ProgressDownload()
 

sngr

AutoIT Гуру
Сообщения
966
Репутация
385
Код:
#include <FTPEx.au3>
Local $server = 'ftp.sac.sk'
Local $username = ''
Local $pass = ''
$res=0
Local $Open = _FTP_Open('MyFTP Control')
Local $Callback = _FTP_SetStatusCallback($Open, 'FTPStatusCallbackHandler')
Local $Conn = _FTP_Connect($Open, $server, $username, $pass, 0, $INTERNET_DEFAULT_FTP_PORT, $INTERNET_SERVICE_FTP, 0)
_FTP_FileGet($Conn,'/sac/avmuseum/v98i403e.zip',@DesktopDir & "\v98i403e.zip",Default,Default,Default,$Callback)
Local $Ftpc = _FTP_Close($Open)
Func FTPStatusCallbackHandler($hInternet, $dwContent, $dwInternetStatus, $lpvStatusInformation, $dwStatusInformationLength)
    #forceref $hInternet, $dwContent
    If $dwInternetStatus = $INTERNET_STATUS_REQUEST_SENT Or $dwInternetStatus = $INTERNET_STATUS_RESPONSE_RECEIVED Then
        Local $Size, $iBytesRead
        $Size = DllStructCreate('dword')
        _WinAPI_ReadProcessMemory(_WinAPI_GetCurrentProcess(), $lpvStatusInformation, DllStructGetPtr($Size), $dwStatusInformationLength, $iBytesRead)
        $res=$res+DllStructGetData($Size, 1)
		ConsoleWrite($res & @LF)
    Else
        ConsoleWrite(_FTP_DecodeInternetStatus($dwInternetStatus) & @LF)
    EndIf
EndFunc   ;==>FTPStatusCallbackHandler
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 443
Репутация
2 392
sngr
В теме про FTP даёшь пример с InetGet, а в этой теме, про InetGet, даёшь пример с FTP, не кажется странным? :smile:
 

sngr

AutoIT Гуру
Сообщения
966
Репутация
385
CreatoR В той теме изначально не было упоминания этой темы, поэтому у меня были все основания полагать, что проблема лишь в кривых руках ТС - я дал первый найденный в поиске пример. ТС пояснил, проблема несколько сложнее и указал эту тему как корень зла.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 443
Репутация
2 392
sngr [?]
В той теме изначально не было упоминания этой темы, поэтому у меня были все основания полагать, что проблема лишь в кривых руках ТС
Но ведь тема то названа «Как вытащить колво скачанных байт из _FTP_SetStatusCallback», поэтому так или иначе пример с InetGet не соответствует тематике, в таких случаях лучше посоветовать автору темы более правильное решение, а не давать пример на то о чём он не спрашивал.

ТС пояснил, проблема несколько сложнее и указал эту тему как корень зла
После чего в этой теме ты дал пример с использованием FTP, что и удивило меня.

Ладно, это не особо важно, тема в любом случае закрыта, т.к заголовок не совпадает с содержимым, а тема которая нужна автору продублирована.
 
Статус
Закрыто для дальнейших ответов.
Верх