Всем добрый вечер,
Неполучается закончить макрос для скачивание файлов. Сперва пробовал указать папку для загрузки файлов, и скачать напрямую, в окне браусера - все скачается, только файлы бывает разные, от 10мб до 600мб, их много, нехочу поставить очень длинный timeout.
Почитал здесь в форуме, нашел пример и попробовал через C# Get:
var resultHttpGet = ZennoPoster.HttpGet("
https://domain.com:2083/cpsess0166097862/getbackup/backup-2-20-2018.tar.gz", "", "UTF-8", ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.File, 150000,"","",true,1,new[] {""},@"C:\test\");
Файл скачает в C:\test\ неполностью,только 38кб (вместо 20мб). В логах пишет : результалт ОК
Подскажите пожалста, что не так делаю?
Спасибо заранее
Встречал подобную проблему что со стандартным экшеном. что через сниппеты.
Во первых проверьте, скачивается ли файлы у вас просто в брузере полностью, с учетом тех же настроек а именно vpn/прокси/dns.
Во вторых решил проблему проще и куда производительней, используя снипет для вызова cmd. Поищи на форуме топик с мануалом и примером как использовать curl через c#.
Замени curl.exe и в сниппете вызов на aria2c
https://aria2.github.io/
использую в аргументах следующую конструкцию
-c -d {-Project.Directory-}\FolderToSave http://{-Variable.url-}
где
-с докачивать если был не скачан полностью
-d директория в которую сохранить скачиваемый файл
Имя файла будет таким-же как и храниться на сервере. В случае совпадения добавляется индекс 1... к названию (причем если файл "дубликат" он будет докачивать. если они совпадают названиями будут скачены 2)
Конечный аргумент у это ссылка на файл:
http://{-Variable.url-}, причем в случае требования http(
s) подключения,
aria2c переключиться на требуемое (юзерам
wget должна быть знакома проблема, у
curl есть опция "
L" при которой откинуть http(s):// и просто указывать ссылки с доменом)
Также можно добавить различный опций которые можно глянуть aria2c --help.
Результат всей конструкции показал отличный результат.
Тестировалось на списке в 35.000 файлов. размерами от килобайта до 32 гигабайт.
При 50 потоках на курпных файлах упиралось все в канал (и наличие свободного места на диске xD )
На маленьких спокойно пускал в 200 потоков (можно и больше, но у меня список рандомный был)
Канал 200 мбит, примерно такая картина
Менее чем за час забил под 300 гигабайт диск
Снипет запуска aria2c, аргументы в переменной
ARGUMENTS
System.Diagnostics.ProcessStartInfo processStartInfo = new System.Diagnostics.ProcessStartInfo();
processStartInfo.CreateNoWindow = true;
processStartInfo.FileName = project.Directory + "\\aria2c.exe";
processStartInfo.Arguments = project.Variables["ARGUMENTS"].Value.Trim();
processStartInfo.UseShellExecute = false;
processStartInfo.RedirectStandardOutput = true;
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo = processStartInfo;
process.Start();
string output = process.StandardOutput.ReadToEnd().Trim();
process.WaitForExit();
if (process.ExitCode != 0)
{
throw new Exception("ERROR");
}
return output;
Из плюшек имеем отличный стабильный даунлоадер, с параллелизация и многопоточностью.
P.s. Если очень большие файлы, иногда может показаться что потоки зависли, но на деле aria2c отчаянно и успешно выполняет ваши таски. Место резервируется перед скачиванием на диске, поэтому не торопитесь прерывать все потоки обновляя информацию о размере папки которая будет не изменой из-за резервации места. В любом случае стоит ограничение на попытки скачивания одного файла и таймауты разумные, все потоки должны добежать до финала.