![]() |
![]() |
![]() |
|
Не получается скачать pdf Олдж, Волшебник, alex_newita, DiMel_77, Мультук, Ёпрст, John83, Djelf, Kongo2019, arsik, бегинер, nick86, Garykom, Буковка, Greeen, who respawn, Скучный бух, A_G, hiddi, Fedor-1971, Bazooka, orakool, Хряк, stix2010, Mankubus, viraboy, Lama12, Hawk_1c, abfm, denk32, unenu, Гость из Мариуполя, ivanov-i-i, igouranga, probably
| ☑ | ||
---|---|---|---|---|
0
John83
25.06.25
✎
02:31
|
На сайте
https://roszdravnadzor.gov.ru/services/turnover вводятся сведения о лекарственном средстве, выводится список найденных. Задача состоит в том, чтобы скачать этот список в pdf. На странице имеется соответствующая кнопка. Смотрел в бразузере параметры запроса, заголовки. Сделал под 1С, но скачивается только страница html поиска, упакованная в архив. Что не так делаю? ИмяФайла = "Выписка.zip"; ПолныйПутьФайла = КаталогДокументов() + ИмяФайла; Сообщить(ПолныйПутьФайла); ТелоЗапроса = Новый Структура; ТелоЗапроса.Вставить("q_label", "244857651"); ТелоЗапроса.Вставить("dt_from", "01.01.2025"); ТелоЗапроса.Вставить("dt_to", ""); ТелоЗапроса.Вставить("q_type_ls", ""); ТелоЗапроса.Вставить("q_org", ""); ТелоЗапроса.Вставить("q_dt_ru_from", ""); ТелоЗапроса.Вставить("q_dt_ru_to", ""); ТелоЗапроса.Вставить("q_no_ru", ""); ТелоЗапроса.Вставить("q_tn", ""); ТелоЗапроса.Вставить("q_mnn", ""); ТелоЗапроса.Вставить("q_series", ""); ТелоЗапроса.Вставить("q_producer", ""); ТелоЗапроса.Вставить("q_country", ""); ТелоЗапроса.Вставить("pdf", "1"); Параметры = ""; Для Каждого ннн1 Из ТелоЗапроса Цикл Если Параметры <> "" Тогда Параметры = Параметры + "&"; КонецЕсли; Параметры = Параметры + ннн1.Ключ + "=" + СокрЛП(ннн1.Значение); КонецЦикла; Сообщить(Параметры); ЗащищенноеСоединениеOpenSSL = Новый ЗащищенноеСоединениеOpenSSL; Соединение = Новый HTTPСоединение("roszdravnadzor.gov.ru", ,,,, 30, ЗащищенноеСоединениеOpenSSL); ЗаголовокHTTP = Новый Соответствие(); ЗаголовокHTTP.Вставить("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); ЗаголовокHTTP.Вставить("Accept-Encoding", "gzip, deflate, br, zstd"); ЗаголовокHTTP.Вставить("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3"); ЗаголовокHTTP.Вставить("Cache-Control", "max-age=0"); ЗаголовокHTTP.Вставить("Connection", "keep-alive"); ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded"); ЗаголовокHTTP.Вставить("Cookie", "uid=3115758488007864343; cookie_agreement=true"); ЗаголовокHTTP.Вставить("DNT", "1"); ЗаголовокHTTP.Вставить("Host", "roszdravnadzor.gov.ru"); ЗаголовокHTTP.Вставить("Origin", "https://roszdravnadzor.gov.ru"); ЗаголовокHTTP.Вставить("Priority", "u=0, i"); ЗаголовокHTTP.Вставить("Referer", "https://roszdravnadzor.gov.ru/"); ЗаголовокHTTP.Вставить("Sec-Fetch-Dest", "document"); ЗаголовокHTTP.Вставить("Sec-Fetch-Mode", "navigate"); ЗаголовокHTTP.Вставить("Sec-Fetch-Site", "same-origin"); ЗаголовокHTTP.Вставить("Sec-Fetch-User", "?1"); ЗаголовокHTTP.Вставить("Upgrade-Insecure-Requests", "1"); ЗаголовокHTTP.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:139.0) Gecko/20100101 Firefox/139.0"); Запрос = Новый HTTPЗапрос("/services/turnover", ЗаголовокHTTP); Запрос.УстановитьТелоИзСтроки(Параметры, "UTF-8"); Ответ = Соединение.ОтправитьДляОбработки(Запрос, ПолныйПутьФайла); |
|||
1
John83
25.06.25
✎
02:33
|
вот тут смотрю параметры
|
|||
2
Ёпрст
гуру
25.06.25
✎
09:07
|
(0) так ты передаешь файл, а не получаешь. Может того, get сделаешь, а не post ? Да и на картинке твоей, не видать, чтоб ты чего то там получил при передачи поста
|
|||
3
John83
25.06.25
✎
09:22
|
(2) под get подразумевается вместо ОтправитьДляОбработки сделать Получить?
Этот запрос появляется после того, как нажимаю "получить пдф". Надо по-другому? |
|||
4
Ёпрст
гуру
25.06.25
✎
09:45
|
(3) На вот, занимайся, всё работает
Адрес = "roszdravnadzor.gov.ru"; HTTPСоединение = Новый HTTPСоединение(Адрес,443,,,,,Новый ЗащищенноеСоединениеOpenSSL(),Ложь); HTTPЗапрос = Новый HTTPЗапрос("services/turnover"); Параметры="q_label=244857651&dt_from=01.01.2025&dt_to=&q_type_ls=&q_org=&q_dt_ru_from=&q_dt_ru_to=&q_no_ru=&q_tn=&q_mnn=&q_series=&q_producer=&q_country=&pdf=1"; HTTPЗапрос.УстановитьТелоИзСтроки(Параметры, "UTF-8"); HTTPЗапрос.Заголовки.Вставить("accept-encoding", "gzip, deflate, br, zstd"); HTTPЗапрос.Заголовки.Вставить("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"); HTTPЗапрос.Заголовки.Вставить("content-type", "application/x-www-form-urlencoded"); HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос,"F:\data\123.pdf"); |
|||
5
John83
25.06.25
✎
10:10
|
(4) неа... так же скачивает хтмл-страницу в архиве 🤷♀️
А где тут GET? |
|||
6
Kongo2019
25.06.25
✎
10:21
|
(0) У них по идее дожен быть блок открытые данные, там лежат файлы в виде XML или CSV.
Есть такое? Или именно ПДФ надо? |
|||
7
John83
25.06.25
✎
11:35
|
(6) я таких не вижу
|
|||
8
John83
25.06.25
✎
11:36
|
и кстати у ответа код 200
Разве в ответном файле не должна содержаться инфа по ошибке? |
|||
9
Garykom
гуру
25.06.25
✎
12:18
|
1. Получить страницу
2. Заполнить поле поиска 3. Нажать кнопочку с лупой 4. Будет две ссылки xls и pdf Через HTTPСоединение это нереально, советую через ПолеHTML документа делать
|
|||
10
Ёпрст
гуру
25.06.25
✎
12:45
|
(5) чего неа? Я ж проверил, перед тем как постить
|
|||
11
Ёпрст
гуру
25.06.25
✎
12:46
|
И какой нах архив? Код целиком копи пасте. Только путь до пдф файла на свой поменяй
|
|||
12
John83
25.06.25
✎
12:55
|
(11) так и сделал
если что 8.3.25.1520 |
|||
13
Ёпрст
гуру
25.06.25
✎
12:59
|
(12)и ?
|
|||
14
John83
25.06.25
✎
13:01
|
(13) качает архив, внутри страничка
|
|||
15
John83
25.06.25
✎
13:06
|
(9) есть рабочий код под питон. Почему нельзя сделать так же под 1с?
|
|||
16
John83
25.06.25
✎
13:06
|
import requests
import logging import os from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry # --- Параметры препарата (указываем здесь!) --- drug_name = "гелофузин" # Название препарата series_number = "244857651" # Номер серии mnn = "" # --- Константы --- save_folder = r"C:\Users\Иван\Downloads" # Папка сохранения safe_drug_name = drug_name.replace(" ", "") # Заменяем пробелы на "" save_filename = f"Выписка_{safe_drug_name}.pdf" save_path = os.path.join(save_folder, save_filename) # --- Логирование --- logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s", handlers=[ logging.FileHandler("download_log.txt", encoding="utf-8"), logging.StreamHandler() ] ) def download_pdf(): url = "https://roszdravnadzor.gov.ru/services/turnover" headers = { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding": "gzip, deflate, br, zstd", "Accept-Language": "ru,en;q=0.9,en-GB;q=0.8,en-US;q=0.7", "Cache-Control": "max-age=0", "Connection": "keep-alive", "Content-Type": "application/x-www-form-urlencoded", "Origin": "https://roszdravnadzor.gov.ru" , "Referer": "https://roszdravnadzor.gov.ru/" , "Sec-Fetch-Dest": "document", "Sec-Fetch-Mode": "navigate", "Sec-Fetch-Site": "same-origin", "Sec-Fetch-User": "?1", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0", "Cookie": "uid=434360480391640124; sp_test=1; sputnik_session=1746516644741|3", } payload = { "q_label": drug_name, "dt_from": "", "dt_to": "", "q_type_ls": "", "q_org": "", "q_dt_ru_from": "", "q_dt_ru_to": "", "q_no_ru": "", "q_tn": "", "q_mnn": mnn, "q_series": series_number, "q_producer": "", "q_country": "", "pdf": "1", } # Сессия с повторами session = requests.Session() retries = Retry( total=3, backoff_factor=2, status_forcelist=[429, 500, 502, 503, 504], allowed_methods=["POST"] ) adapter = HTTPAdapter(max_retries=retries) session.mount("https://", adapter) session.mount("http://", adapter) try: logging.info("Отправка POST-запроса на %s", url) response = session.post(url, headers=headers, data=payload, timeout=(10, 60)) if response.status_code == 200: if response.headers.get('Content-Type') == 'application/pdf': with open(save_path, "wb") as f: f.write(response.content) logging.info("Файл успешно сохранён: %s", save_path) else: logging.error("Ожидался PDF, но пришло: %s", response.headers.get('Content-Type')) else: logging.error("Ошибка при скачивании файла: статус %s", response.status_code) except requests.exceptions.RequestException as e: logging.exception("Ошибка при выполнении запроса: %s", str(e)) download_pdf() |
|||
17
Ёпрст
гуру
25.06.25
✎
13:22
|
(14) пиз..шь
|
|||
18
Ёпрст
гуру
25.06.25
✎
13:23
|
Нет там архива.
|
|||
19
Ёпрст
гуру
25.06.25
✎
13:24
|
Там скачивается pdf в каталог "F:\data\123.pdf"
Дарю: Ctrl+C Ctrl+V Ctrl+Ins Shift+Ins |
|||
20
Kongo2019
25.06.25
✎
13:31
|
||||
21
John83
25.06.25
✎
13:34
|
(17) даже на другом серваке пробовал
|
|||
22
John83
25.06.25
✎
13:35
|
(18) а что у тебя в ответе для "Content-Type"?
|
|||
23
John83
25.06.25
✎
13:37
|
(20) ммм...
можно оставить на крайний случай Но это надо каждый день обновлять файлы. |
|||
24
Ёпрст
гуру
25.06.25
✎
13:43
|
(21) не верю. Покажи свой код
|
|||
25
Ёпрст
гуру
25.06.25
✎
13:47
|
(22)
На
|
|||
26
Ёпрст
гуру
25.06.25
✎
13:48
|
И это , "/ " убери в первой строке кода в адресе
|
|||
27
Ёпрст
гуру
25.06.25
✎
13:50
|
Я ж говорю, учись копипастить, пока не поздно!
|
|||
28
John83
25.06.25
✎
14:49
|
(26) это увидел, но ничего не поменялось
|
|||
29
Ёпрст
гуру
25.06.25
✎
14:55
|
(28) не верю..
|
|||
30
Ёпрст
гуру
25.06.25
✎
15:00
|
Поди запускаешь всё время старую версию своей кривой поделки.
|
|||
31
Мультук
гуру
25.06.25
✎
15:03
|
(29)
Ради интереса - проверил. Подтверждаю - код рабочий. 1) Скопировал твой код в форму обработки Переименовал переменную "параметры", ибо в форме уже есть :-) 2) Файловая база, УФ, 8.3.25.1546 Файлик C:\123\123.pdf получил. И да -- это PDF. P.S. Возможно, у него обработка УЖЕ добавлена в доп.обработки А по быстрому он открывает через Файл->Открыть |
|||
32
Garykom
гуру
25.06.25
✎
17:11
|
(15) Задолбаешься исправлять когда страничку изменят
Например там будет одностраничник с кучей JS кода С подобных сайтов без вменяемого апи нормально парсить только через полноценный браузер |
|||
33
John83
25.06.25
✎
17:45
|
во!
запустил из УТ11 - там взлетело До этого пытался на УТ10 - там режим совместимости "Версия 8.2.13". В этом проблема? Как обойти? |
|||
34
Ёпрст
гуру
25.06.25
✎
18:22
|
(33) отправлять через WinHttps разве что
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |