Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
5 / 3 / 2
Регистрация: 27.04.2022
Сообщений: 60

Автоматизировать процесс скачивания файлов из интернета

04.08.2025, 23:45. Показов 2073. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Имеется необходимость скачать много pdf-файлов из интернета. В основном таких: https://ekfgroup.com/uploads/p... 04B7CE.pdf.
Насколько я понимаю, файлы лежат где-то на серверах, а на сайте на них указывается прямые ссылки. При нажатии на эти ссылки, файлы открываются в браузере, а не скачиваются. Затем, если я хочу какой-либо файл сохранить, я нажимаю в браузере на иконку "Скачать" и он сохраняется в указанную папку на моём компьютере.

Каким образом возможно автоматизировать этот процесс без открытия окна браузера и клацанья мышкой? Поиск по форумам даёт ответы, что нужно использовать классы WebClient и/или HttpClient, но пока ни один из приведённых примеров не сработал.

Задачи скачать все файлы одновременно, мгновенно, асинхронно или ещё как-нибудь нет. Просто хотелось бы эти сотни файлов не руками скачивать. Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.08.2025, 23:45
Ответы с готовыми решениями:

Требуется автоматизировать процесс проектирования и расчета стоимости изготовления оконного блока
Требуется автоматизировать процесс проектирования и расчета стоимости изготовления оконного блока...

Автоматизировать поисковые операций файлов: по расширению; по содержимому
Здравствуйте, уважаемые форумчане! Есть следующая задача: необходимо автоматизировать пару...

Как реализовать статистику скачивания файлов?
Допустим у меня генерится некий список ссылок на файлы. Мне было бы интересно, сколько раз был...

15
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
05.08.2025, 01:56
пример скачивание вашего файла в консольном приложении

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
using System.Diagnostics;
 
var url = @"https://ekfgroup.com/uploads/products/38BD41C7E648B696136B1B1CC104B7CE.pdf";
var fileName = Path.GetFileName(url);
 
{
  var httpClient = new HttpClient();
  using var file = new FileStream(fileName, FileMode.Create);
  using var stream = await httpClient.GetStreamAsync(url);
  stream.CopyTo(file);
}
 
//Process.Start("explorer", fileName); // автоматически открыть после скачивания
А вот получить весь список.... я так понимаю вам нужно спарсить https://ekfgroup.com/ru/support/documentation и там страница не отгружается сразу со всеми линками, а доподгружается по клику. В общем удачи вам "по быстрому" написать скрипт автоматического скачивания. Я бы просто посохранял все нужные документы через браузер. Займёт скорее всего столько же времени, если не меньше.

Цитата Сообщение от power_factor Посмотреть сообщение
При нажатии на эти ссылки, файлы открываются в браузере, а не скачиваются.
В Edge справа вверху кнопка "сохранить как"
2
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,766
05.08.2025, 13:31
У вас две отдельные задачи:
Первая - получить список ссылок на все необходимые pdf-файлы.
Вторая - скачать файлы.

Вторая задача - элементарная (один из вариантов кода привели в предыдущем посте).

Первая - сложнее. Один из вариантов с небольшим использованием мышки:
1. Открыть страницу https://ekfgroup.com/ru/support/documentation в браузере.
2. Вручную раскрыть все группы на всю глубину (в т.ч. прожать "показать все" для тех групп, где много файлов). В итоге браузер подгрузит в текущую страницу элементы со ссылками на файлы.
3. Сохранить страницу на диск (просто через меню браузера).
4. Из полученного (на диске) html-файла выпарсить ссылки на все PDF.

Если же необходимо регулярно парсить сайт и вытягивать все актуальные PDF, то первую задачу можно попробовать полностью автоматизировать через 'WebView2'.
1
 Аватар для imcavs™
-2 / 24 / 8
Регистрация: 19.02.2012
Сообщений: 446
05.08.2025, 13:42
power_factor, как вариант селениум и --headless аргумент, браузер у тебя не будет открываться
0
5 / 3 / 2
Регистрация: 27.04.2022
Сообщений: 60
05.08.2025, 18:04  [ТС]
Wolfdp, подскажите, пожалуйста, как правильно запустить ваш код в цикле? Следующий код на скачивание 10 файлов выполняется от 4 до 6 секунд. Кажется, это долго.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
       List<string> links = File.ReadAllLines(@"D:\САПР\Ссылки.txt").ToList(); // в файле 10 ссылок
       string url, fileName = String.Empty;
       HttpClient httpClient = new HttpClient();
       Stopwatch stopwatch = new Stopwatch();
       stopwatch.Start();
       for (int i = 0; i < links.Count; i++)
       {
           url = links[i];
           fileName = @"D:\САПР\Паспорта\" + Path.GetFileName(url);
           {
               using FileStream file = new FileStream(fileName, FileMode.Create);
               using Stream stream = await httpClient.GetStreamAsync(url);
               stream.CopyTo(file);
           }
       }
       stopwatch.Stop();
       Console.WriteLine(stopwatch.Elapsed); // 4-6 секунд на выполнение
Есть чувство, если запустить цикл на 300-400 ссылок, можно компьютеру сделать больно.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
05.08.2025, 19:30
power_factor, попробуйте поиграть с этим кодом, варьируя число подключений.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System.Diagnostics;
 
var targetDir = @"D:\САПР\Паспорта\";
List<string> links = File.ReadAllLines(@"D:\САПР\Ссылки.txt").ToList();
await DownloadFiles(links, targetDir);
 
 
async Task DownloadFiles(IList<string> links, string targetDir, int conNumber = 4)
{
    var clients = new HttpClient[conNumber];
    for (var i = 0; i < conNumber; i++)
        clients[i] = new HttpClient();
 
    var tasks = new List<Task>(links.Count);
    var stopwatch = Stopwatch.StartNew();
    foreach (var (link, index) in links.Select((l, i) => (l, i)))
        tasks.Add(DownloadFile(link, index));
 
    try
    {
        await Task.WhenAll(tasks);
        stopwatch.Stop();
        Console.WriteLine(stopwatch.Elapsed); // 4-6 секунд на выполнение
    }
    finally
    {
        tasks.ForEach(x => x.Dispose());
    }
    
 
    async Task DownloadFile(string link, int index)
    {
        await using var fileStream = new FileStream(Path.Combine(targetDir, Path.GetFileName(link)), FileMode.Create);
        await using var httpStream = await clients[index % conNumber].GetStreamAsync(link);
        await httpStream.CopyToAsync(fileStream);
    }
}
Добавлено через 13 минут
4.7 секунд в среднем на 4-х подключениях, на 10 ссылок.
1
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
05.08.2025, 19:48
Цитата Сообщение от IamRain Посмотреть сообщение
4.7 секунд в среднем на 4-х подключениях, на 10 ссылок.
Ручная статистика (10 раз по 10 файлов), надо смотреть на бОльшем коло-ве скачиваний.
Миниатюры
Автоматизировать процесс скачивания файлов из интернета  
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
05.08.2025, 19:55
Цитата Сообщение от IamRain Посмотреть сообщение
tasks.ForEach(x => x.Dispose());
Очепятка, clients тут должен.

Добавлено через 2 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
try
    {
        await Task.WhenAll(tasks);
        stopwatch.Stop();
        return stopwatch.Elapsed;
    }
    finally
    {
        foreach (var client in clients)
            client.Dispose();
    }
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
06.08.2025, 01:33
Цитата Сообщение от power_factor Посмотреть сообщение
Следующий код на скачивание 10 файлов выполняется от 4 до 6 секунд
т.е. меньше секунды на файл? Кажись оно работает как надо. Я бы ничего не параллелил, т.к. сервера очень не любят когда к ним ломяться в 100500 потоков.

единственное что можно поправить в вашем коде это:
- использовать await stream.CopyToAsync(file);, я у себя провмыкал этот момент
- using не нужно паковать в дополнительные скобки, достаточно тех что в for
0
 Аватар для iLinks
800 / 458 / 237
Регистрация: 03.01.2017
Сообщений: 1,339
21.08.2025, 09:44
Параметры для POST запроса (некоторые возможно ненужные)
Кликните здесь для просмотра всего текста

lamp
default
modulnoe-oborudovanie
ustrojstva-zashhity-ot-impulsny-perenapryazhenij
ustro-vo-zashhity-ot-impulsny-perenapryazhenij-uzip-opv-ekf
ustrojstvo-zashhity-ot-impulsny-perenapryazhenij-uzip-klass-i-ii
uzip-specialnogo-naznacheniya
modulnye-avtomaticheskie-vyklyuchateli
dopolnitelnye-ustrojstva
ustrojstva-zashhity-ot-dugovogo-proboya
avtomaticheskie-vyklyuchateli-differencialnogo-toka-avdt-difavtomaty
vyklyuchateli-differencialnogo-toka-vdt-uzo
modulnye-predo-raniteli-razediniteli
predo-raniteli-razediniteli-dlya-pvc
plavkie-vstavki-pvc
predo-raniteli-plavkie-ppn
rele
tajmery-elektronnye
rele-zashhity-dvigatelya-serii-mpr
tverdotelnye-rele
rubilniki-modulnye
modulnye-vyklyuchateli-nagruzki
tre-pozicionnye-pereklyuchateli
rubilniki-modulnye-ms
kontaktory-modulnye
kontaktory-modulnye-km-averes
silovoe-oborudovanie
ustrojstva-kompensacii-reaktivnoj-moshhnosti-i-komplektuyushhie
regulyatory-dlya-ustanovok-krm
nizkovoltnye-silovye-kondensatory
kondensatornye-kontaktory
avtomaticheskie-vyklyuchateli-v-litom-korpuse
aksessuary-dlya-vyklyuchatelej-avtomaticheski-silovy
vyklyuchateli-avtomaticheskie-silovye
avtomaticheskie-vyklyuchateli-vozdushnye
aksessuary-dlya-vyklyuchatelej-avtomaticheski-vozdushny
kontaktory-puskateli-rele-i-aksessuary-k-nim
puskateli-v-korpuse
kontaktory
vyklyuchateli-nagruzki-rubilniki-razediniteli-predo-raniteli
vyklyuchateli-nagruzki-modulnye
predo-raniteli-i-predo-raniteli-razediniteli
razediniteli
vyklyuchateli-razediniteli-rubilniki
avtomaticheskij-vvod-rezerva-avr
chastotnye-preobrazovateli-i-aksessuary
avtomatizaciya-i-upravlenie
relejnaya-avtomatika
tajmery-elektronnye-ekf-proxima
rele-vremeni
rele-zashhity-dvigatelya-serii-mpr-ekf
rele-kontrolya-faz
rele-napryazheniya
rele-urovnya
fotorele
rele-temperatury
impulsnye-rele
ogranichiteli-moshhnosti
rele-vybora-faz
kontrollery-avr
stabilizatory-napryazheniya-istochniki-besperebojnogo-pitaniya
stabilizatory
bloki-pitaniya
istochniki-besperebojnogo-pitaniya-e-power
preobrazovateli-chastoty
preobrazovateli-chastoty-ekf-proxima
preobrazovateli-chastoty-ekf-basic
ems-filtry
knopki-knopochnye-posty-pereklyuchateli-svetosignalnaya-armatura
dopolnitelnye-ustrojstva-dlya-knopok-i-pereklyuchatelej
knopochnye-posty
pulty
vyklyuchateli-knopochnye-s-blokirovkoj
kulachkovye-pereklyuchateli
koncevye-i-putevye-vyklyuchateli
paketnye-vyklyuchateli-i-pereklyuchateli
potenciometry
ustrojstva-sbora-i-peredachi-danny
modemy
bloki-pitaniya-adaptery
preobrazovateli-interfejsov
antenny
programmiruemye-ustrojstva-plc-hmi
programmiruemye-logicheskie-kontrollery-pro-logic
sensornye-paneli-operatora-pro-screen
programmiruemye-rele-pro-relay
datchiki-kip
rele-davleniya
datchiki-urovnya
beskontaktnye-datchiki
datchiki-temperatury
datchiki-vlazhnosti-i-temperatury
tverdotelnye-i-promezhutochnye-rele
promezhutochnye-rele
rele-tverdotelnye
izmeriteli-regulyatory-ter
instrument-i-izdeliya-dlya-elektromontazha
instrumenty
multimetry-i-pribory-ekf
instrument-dlya-opressovki
instrument-dlya-snyatiya-izolyacii-s-provoda-i-kabelya
sistemy-raneniya-i-perenoski-instrumenta
ras-odnye-materialy-i-prinadlezhnosti-k-elektroinstrumentu
sredstva-individualnoj-zashhity
izmeritelnyj-instrument
otvertki
sharnirno-gubcevyj-instrument
nozhi-te-nicheskie
nabory-instrumenta
instrument-dlya-rezki-provoda-i-kabelya
izdeliya-dlya-elektromontazha
termousazhivaemaya-trubka-tut
nakonechniki-i-gilzy-silovye
nakonechniki-i-gilzy-boltovye
nakonechniki-izolirovannye-i-neizolirovannye
razemy-izolirovannye
gilzy-soedinitelnye-izolirovannye
klemmy-smk
soedinitelnye-izoliruyushhie-zazhimy-siz
otvetviteli-prokalyvayushhie
izolenta
omuty
skoby-krepezhnye-plastikovye
krepezhnye-elementy-dlya-pryamogo-montazha
protyazhki-kabelnye
izmeritelnaya-apparatura
transformatory-izmeritelnye
schetchiki-elektroenergii
schetchiki-elektricheskoj-energii-skat-odnofaznye
schetchiki-elektricheskoj-energii-skat-tre-faznye
kolodki-ispytatelnye
schetchiki-elektricheskoj-energii-modulnye-skat-odnofaznye
aksessuary-dlya-schetchikov-elektroenergii
mnogofunkcionalnye-izmeriteli
ampermetry
ampermetry-analogovye
ampermetry-cifrovye
voltmetry
voltmetry-analogovye
voltmetry-cifrovye
modulnye-cifrovye-indikatory
elektroustanovochnye-izdeliya
rozetki-vyklyuchateli
rozetki
vyklyuchateli
ramki-i-licevye-paneli
prochie-rozetki-i-vyklyuchateli
termoregulyatory
udliniteli-setevye-filtry-patrony-i-aksessuary
elementy-pitaniya
dopolnitelnye-ustrojstva-v-rozetku
udliniteli-i-kolodki-serii-ekspert
setevye-filtry-blokbaster
patrony
udliniteli-katushka
udliniteli-serii-kub
udliniteli-serii-lux
silovye-razemy
razemy-silovye
razemy-rsh-vsh
rozetki-silovye-s-blokirovkoj
montazhnye-i-raspaechnye-korobki
raspaechnye-korobki-naruzhnye
raspaechnye-korobki-pod-derevo-naruzhnye
bytovye-zvonki
zvonki-bytovye
domofony
sistemy-obogreva-i-zashhity-ot-protechek-vody
bytovoj-obogrev
nagrevatelnyj-mat-uyut
termostaty-dlya-teply-polov
nagrevatelnyj-kabel
infrakrasnyj-plenochnyj-teplyj-pol
komplekty-dlya-obogreva-truboprovodov-stopfrost
ar-itekturnyj-obogrev
samoreguliruyushhijsya-kabel
rezistivnyj-kabel
reguliruyushhaya-apparatura
korobki-soedinitelnye
promyshlennyj-elektroobogrev
samoreguliruyushhijsya-nagrevatelnyj-kabel-dlya-promobogreva
nagrevatelnyj-kabel-postoyannoj-moshhnosti-rgn
nagrevatelnyj-kabel-postoyannoj-moshhnosti-lle
korobki-soedinitelnye-vzryvozashhishhennye-heat-box
krepezhnye-elementy-dlya-promyshlennogo-obogreva
umnyj-dom
umnye-lampy
umnye-kamery
umnye-svetodiodnye-lenty
umnye-termoregulyatory
sistema-zashhity-ot-protechek-vody
umnye-sensory-i-pulty
umnye-svetilniki
umnye-rele-wi-fi
umnye-rele-zigbee
umnye-rozetki-i-vyklyuchateli
umnye-rozetki
umnye-udliniteli
umnye-elektroustanovochnye-izdeliya-serii-stokgolm
svetote-nika
upravlenie-osveshheniem
mikrovolnovye-datchiki-dvizheniya
infrakrasnye-datchiki-dvizheniya
fotorele-dlya-upravleniya-osveshheniem
naruzhnoe-osveshhenie
prozhektory-svetodiodnye
ulichnye-konsolnye-svetilniki
kommercheskoe-osveshhenie
svetodiodnye-paneli
daunlajty
svetilniki-linejnye-dlya-retejla
svetilniki-dlya-potolkov-grilyato
svetilniki-linejnye-torgovye
kommunalno-bytovoe-osveshhenie
svetilniki-svetodiodnye-dlya-zhk
svetilniki-svetodiodnye-linejnye-s-vyklyuchatelem
promyshlennoe-osveshhenie
svetilniki-svetodiodnye-linejnye
svetilniki-dlya-vysoki-proletov
sistemy-dlya-prokladki-kabelya
lotki-i-montazhnye-elementy
kryshki-dlya-metallicheskogo-lotka-ekf
krepezh-i-metizy-mf-line-ekf
sistema-podvesov-h-line-ekf
strut-sistema-s-line-ekf
ognezashhita-kabelny-linij-i-kabelny-pro-odok-fp-line-ekf
lotki-listovye-t-line
lotki-lestnichnye-usilennye-i-aksessuary-m-line-plus-ekf
lotki-provolochnye-i-aksessuary-r-line
truby-metallicheskie-i-aksessuary-st-line
lotki-lestnichnye-i-aksessuary-m-line
armatura-i-instrument-dlya-montazha-sip
soedinitelnaya-armatura
vspomogatelnaya-armatura
otvetvitelnaya-armatura
instrument-i-prisposobleniya-dlya-motazha-sip
individualnaya-upakovka
montazhnye-i-raspayachnye-korobki
montazhnye-korobki-dlya-poly-sten
montazhnye-korobki-dlya-tverdy-sten
raspayachnye-korobki-naruzhnye
raspayachnye-korobki-pod-derevo-naruzhnye
aksessuary-dlya-montazhny-korobok
ognestojkie-korobki-i-prinadlezhnosti
sistemy-organizacii-rabochi-mest-c-line
parapetnyj-kabelnyj-kanal-ekf-c-line
napolnye-sistemy-c-line
modulnye-rozetki-i-vyklyuchateli
sistemy-vstraivaemye-v-stol-c-line
germetichnye-kabelnye-konnektory
mufty-zalivnye
kabelnye-kanaly-i-aksessuary
aksessuary-dlya-kabelnogo-kanala
kabelnyj-kanal-ekf-plast
kabelnyj-kanal-ekf-basic
perforirovannye-kabelnye-kanaly
metallorukava-i-aksessuary
metallorukav-v-chernoj-pv-izolyacii
metallorukav-v-bu-ta
aksessuary-dlya-metallorukava
plastikovye-truby-i-aksessuary
truby-gofrirovannye-pv-ekf-plast
truby-gofrirovannye-negoryuchie-bezgalogenovye-frhf-ekf-plast
truby-gofrirovannye-pnd-ekf-plast
truba-gladkaya-pnd-ekf-plast
truba-dvustennaya-pnd
truba-gladkaya-pv-zhestkogo-tipa-ekf-plast
aksessuary-dlya-trub
molniezashhita
izolirovannaya-molniezashhita
izolirovannye-molniepriemniki
shtangi-izolirovannye
derzhateli-dlya-izolirovanny-shtang
kreplenie-dlya-izolirovanny-shtang
izolirovannyj-tokootvod
aksessuary-dlya-izolirovannogo-tokootvoda
zazemlenie
komplekty-zazemleniya
elementy-zazemleniya
elektroliticheskoe-zazemlenie
dopolnitelnye-elementy
molniepriemniki-i-molnieotvody
molniepriemniki-passivnye
provodniki-ploskie-i-kruglye
machty-mmsps-f
molniepriemniki-sekcionnye-stenovye-passivnye-mssp
machty-mmsp
krepezhnye-elementy
derzhateli-krovelnye
derzhateli-na-konek
derzhateli-na-konek-reguliruemye
derzhateli-pod-cherepicu-proflist
derzhateli-dlya-vodostochny-trub
derzhateli-provodnika-na-trube
derzhateli-krugly-i-ploski-provodnikov
derzhateli-fasadnye
derzhateli-falcevye
zazhimy
aktivnaya-molniezashhita
molniepriemniki-aktivnye
machty-mmsas-f
molniepriemniki-sekcionnye-stenovye-aktivnye-mssa
machty-mmsaa
telekommunikaciya
linejno-interaktivnye-ibp-e-power-s-chistoj-sinusoidoj
kabelnaya-produkciya
vitaya-para-lan
promyshlennyj-i-interfejsnyj-kabel
setevoj-instrument
komponenty-dlya-medny-sistem
patch-kordy
moduli-keystone
patch-paneli
informacionnye-rozetki-i-adaptery
patch-paneli-nabornye
rozetochnye-ramki-vstavki-korpus-a
elektroraspredelenie-v-shkafa
gorizontalnye-bloki-pdu
kabeli-elektropitaniya-dlya-pdu-i-ibp
shkafy-stojki-korpusa-dlya-it-oborudovaniya
aktivnoe-telekommunikacionnoe-oborudovanie
promyshlennye-kommutatory-tsx
neupravlyaemye-promyshlennye-kommutatory
upravlyaemye-promyshlennye-kommutatory
mediakonvertery-preobrazovateli-interfejsov
sfp-moduli
oborudovanie-srednego-napryazheniya-stingray
korpusa-kso
relejnaya-zashhita
ustrojstvo-rza
ukazatelnye-rele
vakuumnye-vyklyuchateli
predo-raniteli-vysokovoltnye
ibp-postoyannogo-toka-e-power
bloki-pitaniya-ac-dc
elektrozapravochnye-stancii
shhity-korpusa-i-komplektuyushhie
nizkovoltnye-komplektnye-ustrojstva-nku
shhity-yatp-basic
shhity-oshhv-basic
elementy-komplektacii-shkafov
raspredelitelnye-bloki
klemmy
shiny-soedinitelnye-pin-fork-i-aksessuary-dlya-shin
shiny-nulevye
kabelnye-vvody-salniki-i-aksessuary-k-nim
din-rejki-kronshtejny-i-zazhimy
zamki-dlya-shhitov-i-nakladki
znaki-bezopasnosti-i-lenty-predupreditelnye
zaglushki-karman-dlya-dokumentacii-povodki-zazemleniya-komplekt-montazha-okna-ucheta
elektrote-nicheskie-shiny
izolyatory
sistemy-podderzhaniya-mikroklimata
lyuki-revizionnye
lenta-spiralnaya-montazhnaya-swb
aksessuary-i-prochie-komplektuyushhie
universalnye-terminaly-dlya-provodnikov
plastikovye-shhity
vstraivaemye
navesnye
shhity-ucheta
s-motazhnoj-platoj
metallichesike-shkafy
shhity-uchetno-raspredelitelnye-navesnye-i-vstraivaemye
ustrojstva-etazhnye-i-aksessuary-dlya-mnogokvartirnogo-doma
napolnye
popular
asc
desc
concrete
pc
conditioner
dishwasher
exhaust
fan
fridge
iron
kettle
lighting
microwave
mixer
oven
router
shower
sockets
soundsystem
tv
usb

Сам пост запрос:
Code
1
https://hasura.ekfgroup.com/v1/graphql
Тело:
JSON
1
2
3
4
5
6
7
8
{
  "query": "query DocumentationItems($locale: String, $slug: String!) {\n  categories: ekfgroup_catalog_categories(\n    where: {active: {_eq: true}, slug: {_eq: $slug}, language: {code: {_eq: $locale}}}\n    limit: 1\n  ) {\n    children(\n      where: {_not: {children: {}}, files: {file_type_id: {_in: [\"373e91f9-64c9-11e8-a1fa-00155d00711b\", \"aaa3753c-688f-11e8-a1fa-00155d00711b\", \"f79f43ce-5fd0-11e6-b98c-000c29c6d5f2\", \"14493015-85a8-11e6-9dda-000c29c6d5f2\", \"77527d49-735f-11e6-971e-000c29c6d5f2\", \"f79f43d3-5fd0-11e6-b98c-000c29c6d5f2\", \"f79f43d1-5fd0-11e6-b98c-000c29c6d5f2\", \"f79f43d4-5fd0-11e6-b98c-000c29c6d5f2\", \"f79f43d5-5fd0-11e6-b98c-000c29c6d5f2\", \"aa11a788-73f7-11e6-971e-000c29c6d5f2\"]}}, language: {code: {_eq: $locale}}}\n      order_by: {sort_order: asc, id: asc}\n    ) {\n      ...DocumentationItemFragment\n    }\n  }\n}\n\nfragment DocumentationItemFragment on ekfgroup_catalog_categories {\n  name\n  slug\n  image\n  files(\n    where: {file_type_id: {_in: [\"373e91f9-64c9-11e8-a1fa-00155d00711b\", \"aaa3753c-688f-11e8-a1fa-00155d00711b\", \"f79f43ce-5fd0-11e6-b98c-000c29c6d5f2\", \"14493015-85a8-11e6-9dda-000c29c6d5f2\", \"77527d49-735f-11e6-971e-000c29c6d5f2\", \"f79f43d3-5fd0-11e6-b98c-000c29c6d5f2\", \"f79f43d1-5fd0-11e6-b98c-000c29c6d5f2\", \"f79f43d4-5fd0-11e6-b98c-000c29c6d5f2\", \"f79f43d5-5fd0-11e6-b98c-000c29c6d5f2\", \"aa11a788-73f7-11e6-971e-000c29c6d5f2\", \"8585a500-704f-11e6-971e-000c29c6d5f2\", \"2cec8893-2a8f-11ec-a21d-00155d007700\", \"e4694427-f2ab-11ea-a219-00155dfa1116\"]}}\n    order_by: {sort_order: asc}\n  ) {\n    name\n    description\n    file\n  }\n}",
  "variables": {
    "locale": "ru",
    "slug": "rele"
  },
  "operationName": "DocumentationItems"
}
В slug вставляете то что под спойлером. А вот с query не стал особо разбираться. Повозитесь с этим материалом.

UPD. Поделал запросы, меняя только slug, ссылки на доки приходят
1
 Аватар для iLinks
800 / 458 / 237
Регистрация: 03.01.2017
Сообщений: 1,339
21.08.2025, 09:53
Например "slug": "umnyj-dom"
Кликните здесь для просмотра всего текста

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
{
    "data": {
        "categories": [{
            "children": [{
                "name": "Умные камеры",
                "slug": "umnye-kamery",
                "image": "/storage/QSkHq0bDx9yTm31q5YXuY1cypjtKx6velTdZEJS7.jpg",
                "files": [{
                    "name": "Сертификат RU C-CN.НВ26.В.01435/21",
                    "description": "Сертификат",
                    "file": "D2BB466CB3DF87162F5B288B77C51BF1.pdf"
                }]
            }, {
                "name": "Умные светодиодные ленты",
                "slug": "umnye-svetodiodnye-lenty",
                "image": "/storage/jPazES6AxlrL3ylKCixQUTOKpiW5ofqrwdrmHUBm.jpg",
                "files": [{
                    "name": "Сертификат RU C-CN.HA46.B.00962/21",
                    "description": "Сертификат",
                    "file": "863D31550208A7DB7742BE3ECF76943C.pdf"
                }]
            }, {
                "name": "Система защиты от протечек воды",
                "slug": "sistema-zashhity-ot-protechek-vody",
                "image": "/storage/3pk4TlEMQT6RMOOztKSRzFc06CMzjji0FErnmWUi.jpg",
                "files": [{
                    "name": "Мастер-каталог",
                    "description": "",
                    "file": "E9F0DBB4BF527D9CF0AFB35FC9E19D3C.pdf"
                }, {
                    "name": "Декларация соответствия система защиты от протечки",
                    "description": "Декларация соответствия система защиты от протечки",
                    "file": "265B93C8ABAB2F54A60EF9A1B876A4DF.pdf"
                }, {
                    "name": "Декларация соответствия шаровой кран",
                    "description": "Декларация соответствия шаровой кран",
                    "file": "06FA3C8849294C17685DE0B055C692F0.pdf"
                }, {
                    "name": "Декларация соответствия модуль управления системой AquaExpert",
                    "description": "Декларация соответсвия модуль управления системой AquaExpert",
                    "file": "8B8ECD95461161F32DBC26534E053840.pdf"
                }, {
                    "name": "Декларация соответствия датчик протечки",
                    "description": "Декларация соответствия датчик протечки",
                    "file": "3ED4175027DCB5D875DB963004EAAE6E.pdf"
                }]
            }, {
                "name": "Умные светильники",
                "slug": "umnye-svetilniki",
                "image": "/storage/trKx59TUwuHD8SazSR5saulCqhIjr0gMJbQHnGKK.jpg",
                "files": [{
                    "name": "Паспорт",
                    "description": "",
                    "file": "2AA90C251096DE48D91CF1D8C285BAF5.pdf"
                }]
            }]
        }]
    }
}


Ну и ссылка на файл формируется так:
Code
1
https://ekfgroup.com/uploads/products/{то что под ключом file}
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
21.08.2025, 18:37
Цитата Сообщение от iLinks Посмотреть сообщение
В slug вставляете то что под спойлером. А вот с query не стал особо разбираться. Повозитесь с этим материалом.
Делов-то, человеку не знающему как пнуть обычное скачивание файлов разобраться с graphql
0
151 / 135 / 29
Регистрация: 02.07.2013
Сообщений: 967
22.08.2025, 07:37
Цитата Сообщение от Wolfdp Посмотреть сообщение
т.е. меньше секунды на файл? Кажись оно работает как надо. Я бы ничего не параллелил, т.к. сервера очень не любят когда к ним ломяться в 100500 потоков.
если не любят много запросов от одного клиента одновременно, то как тогда графический контент в клиент отправляют? я про то что в отладчике того же гуглхрома видно что при открытии странички одновременно улетает куча запросов на разные файлы с картинками, кодом, запросы к API и прочее.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
22.08.2025, 08:09
golosalex, js и иконки кешируются, медиа сейчас грузят "по скролингу", если говорить про ленты, причём CDN и микросервисы позволяют разгрузить запросы на отдельные кластеры. Да куча оптимизаций, трафик как бы не резиновый. Ещё учитывайте что браузер по умному юзает один сокет на подключение к серваку, т.к. http позволяет делать запросы асинхронно. Примеры выше генерят отдельные HttpClient, что по идеи является отдельным подключением.

Но я вообще не рекомендую валить запросы на серваки такого плана по несколько иным соображениям:
- не факт что там прям хороший сервак выделен под этот сайт, так что лишние запросы могут банально положить его.
- админ может упороться и влепить ограничение 100 запросов/подключений в минуту с одного IP, иначе бан на сутки-другие.
- скачать за 1 минуты или за 5 -- не сильно большая разница. Если это операция выполняемая раз в месяц, можно и подождать. Ради этого возиться с распараллеливанием задач -- кажись оно того не стоит.
0
22.08.2025, 11:23

Не по теме:

Цитата Сообщение от Wolfdp Посмотреть сообщение
Делов-то, человеку не знающему как пнуть обычное скачивание файлов разобраться с graphql
:D В любом случае, направление задал, дальше дело за ТС

0
108 / 72 / 6
Регистрация: 08.08.2025
Сообщений: 716
26.08.2025, 05:29
Качалку долго писать.
Старенький ДанлоудМастер просто монстрюга, все выкачивает, там и скорость регулируется и 10 файлов за раз. Накидал 100 файлов в список и пошел спать.
Тогда зачем нарягаться...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.08.2025, 05:29
Помогаю со студенческими работами здесь

Web.config - запрет исполнения скачивания всех файлов из директории
Экспериментировал с &quot;authentication&quot; и &quot;authorization&quot;, но так и не подобрал нужной комбинации....

Приложение для скачивания apk-файлов из магазина Google Play
У меня возникла необходимость создания приложения на С# для программного скачивания apk-файлов из...

Библиотека для скачивания файлов в приложении на Xamarin
Добрый день! Пишу приложение на Xamarin под андроид, которое скачивает медиа-файлы с интернета...

Создание архивов: создать АПИ для скачивания файлов и папок из директории
Здравствуйте! Помогите, пожалуйста, разобраться с задачей. Необходимо сделать АПИ для скачивания...

Актуальные ссылки для скачивания файлов
Доброго времени суток. Я делаю программу для скачивания приложений. И когда я через время снова...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru