Имя: Пароль:
1C
1С v8
Скачать картинку по https
,
0 artur_fcsm
 
25.02.22
08:04
Товарищи, прошу помощи.
Скачиваю картинки с сайта по API.

делал так:
            ХТТП = Новый COMОбъект("Microsoft.XMLHTTP");
            ХТТП.Open("get", "https://www.sima-land.ru/api/v3/item?sid="+АртикулПоставщика, Ложь);    
            ХТТП.Send();
                ЧтениеJSON = Новый ЧтениеJSON;
                ЧтениеJSON.УстановитьСтроку(ХТТП.ПолучитьТелоКакСтроку());
                Ответ = ПрочитатьJSON(ЧтениеJSON,Ложь);
                ЧтениеJSON.Закрыть();
                                                          Для каждого Параметр1 из Параметр.Значение Цикл
                                    Фото = Параметр1["photoUrl"];
                                    Сообщить(Фото);
                                    Фото1 = СТРЗаменить(Фото,"https://","http://");
                                    Сообщить(Фото1);
                                    ПутьКФайлу = "D:\Сайт\ФотоПарсинг\Сима\"+АртикулПоставщика+"15.jpg";
                                    КопироватьФайл (Фото1, ПутьКФайлу);
                                     КонецЦикла
И все работает. т.е. я в итоге скачаивал не с https, а c http.
Но в работе с другим сайтом появилась проблема, что он не дает скачать по http :((
А при скачивании с https выходит ошибка доступа к файлу(((
1 artur_fcsm
 
25.02.22
08:06
Если пытаюсь сделать вот так:

ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(
            Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Авто),
            Новый СертификатыУдостоверяющихЦентровWindows());
            Соединение = Новый HTTPСоединение("www.sima-land.ru",,,,,,ЗащищенноеСоединение);    
            Запрос = Новый HTTPЗапрос("/api/v3/item?sid="+АртикулПоставщика);    
            ХТТП = Соединение.Получить(Запрос);
            Сообщить(ХТТП.ПолучитьТелоКакСтроку());

То всегда прилетает ошибка 301, а тело ответа пустое (((

Никак не могу победить(
2 acht
 
25.02.22
08:14
301 это не ошибка. Это переадресация. В заголовке Location тебе сообщают куда идти.
3 acht
 
25.02.22
08:20
(0)
> ХТТП = Новый COMОбъект("Microsoft.XMLHTTP");
> ...
> ЧтениеJSON.УстановитьСтроку(ХТТП.ПолучитьТелоКакСтроку());
> ...
> И все работает


Черпашка п#здит
4 artur_fcsm
 
25.02.22
08:21
(2) Да, я конечно же читал про это, но у меня тело ответа пустое. Нет заголовка Location
В отладчике ХТТП.ПолучитьТелоКакСтроку() = ""
5 artur_fcsm
 
25.02.22
08:22
(3) Согдасен) Два способа наложились.

Конечно же (ХТТП.ResponseText)
6 acht
 
25.02.22
08:31
(4) Заголовок передается не в теле, а в заголовке. Ваш К.О.
7 artur_fcsm
 
25.02.22
08:34
URI = СтруктураURI(ХТТП.Заголовки.Получить("Location"));
            Сообщить(URI.Схема);
            Сообщить(URI.ИмяСервера);
В отладке:
URI    Структура    Структура
ИмяСервера    ""    Строка
Логин    ""    Строка
Пароль    ""    Строка
Порт        Неопределено
ПутьНаСервере    ""    Строка
Схема    ""    Строка
Хост    ""    Строка
8 artur_fcsm
 
25.02.22
08:35
(6)
9 acht
 
25.02.22
08:38
(7) Что в ХТТП.Заголовки.Получить("Location") ?
10 Kassern
 
25.02.22
08:39
А чем вас не устроил стандартный - Новый HTTPСоединение?
11 artur_fcsm
 
25.02.22
08:41
(9) ХТТП.Заголовки.Получить("Location")        Неопределено
12 artur_fcsm
 
25.02.22
08:42
(10) им и пытаюсь сделать

ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(
            Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Авто),
            Новый СертификатыУдостоверяющихЦентровWindows());
            Соединение = Новый HTTPСоединение("www.sima-land.ru",,,,,,ЗащищенноеСоединение);    
            Запрос = Новый HTTPЗапрос("/api/v3/item?sid="+АртикулПоставщика);    
            ХТТП = Соединение.Получить(Запрос);
            Сообщить(ХТТП.ПолучитьТелоКакСтроку());
            URI = СтруктураURI(ХТТП.Заголовки.Получить("Location"));
            Сообщить(URI.Схема);
            Сообщить(URI.ИмяСервера);
13 artur_fcsm
 
25.02.22
08:42
Складывается ощущение, что у меня запрос в принципе неправльный...
14 acht
 
25.02.22
08:43
(12) Оставь просто
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();

Или у тебя авторизация по сертификату?
15 artur_fcsm
 
25.02.22
08:44
(14) нет, обычный сайт
https://www.sima-land.ru/api/v3/item/?sid=3098609
16 artur_fcsm
 
25.02.22
08:48
(14) и так пробовал. Тоже самое (
17 dmt
 
25.02.22
09:04
(15) у тебя в чем проблема, ошибка 301 или ты ждешь фото, а приходит мусор?
18 dmpl
 
25.02.22
09:06
(15) Так для картинки же другой сервер требуется - создавай новое соединение к другому серверу.
19 Kassern
 
25.02.22
09:08
(12) Вместо ХТТП = Соединение.Получить(Запрос); , напишите ниже:
Ответ = Соединение.ВызватьHTTPМетод("GET",Запрос);
Если Ответ.КодСостояния=200 Тогда
    ДД=Ответ.ПолучитьТелоКакДвоичныеДанные();
    ДД.Записать(ПутьДоКартинки);
КонецЕсли;
20 Kassern
 
25.02.22
09:09
а блин, только по ссылке перешел, вам обычная xml возвращается, а не картинка!
Парсите ее и получаете тег photoUrl, по нему уже картинку получаете
21 Kassern
 
25.02.22
09:11
(19) этот кусок относится к этой ссылке https://cdn3.static1-sima-land.com/items/3179176/0/700.jpg?v=1641977854
По ней вы картинку скачаете)
22 artur_fcsm
 
25.02.22
09:13
(21) Все сделано, только картинка не скачивается :(
Ошибка доступа к файлу 'https://cdn3.static1-sima-land.com/items/4549085/0/700.jpg?v=1600705892'
по причине:
Ошибка работы с Интернет:  Удаленный узел не прошел проверку
23 Kassern
 
25.02.22
09:16
(22) да вы издеваетесь))
Только что попробовал, все скачалось. Что у вас в адресе HTTPСоединение?
24 Kassern
 
25.02.22
09:17
Вот вам рабочий кусок кода
    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
    Соединение = Новый HTTPСоединение("cdn3.static1-sima-land.com",,,,,,ЗащищенноеСоединение);    
    Запрос = Новый HTTPЗапрос("/items/4549085/0/700.jpg?v=1600705892%27");
    Ответ = Соединение.ВызватьHTTPМетод("GET",Запрос);
    Если Ответ.КодСостояния=200 Тогда
        ДД=Ответ.ПолучитьТелоКакДвоичныеДанные();
        ДД.Записать(ПутьДоКартинки);
    КонецЕсли;
25 Garykom
 
гуру
25.02.22
09:18
(22) на другом компуктере попробуй
ssl это такая штука что если на клиенте плохо с сертификатами или датой то упс
26 dmpl
 
25.02.22
09:18
(24) А %27 нафига в конце?
27 Kassern
 
25.02.22
09:19
и да, не забывайте кодировать в урл текст запроса, а то мало ли какие символы встретятся и имейте в виду что сервер с картинками не равен серверу, где вы xml берете
28 dmpl
 
25.02.22
09:19
(22) Корневые сертификаты на компе обновлены?
29 Kassern
 
25.02.22
09:21
(26) хз, случайно подцепил, видимо это кавычка) но сималенд схавал и дал картинку, можно и без этих символов в конце
30 dmpl
 
25.02.22
09:21
(25) Да, время тоже может портить, если часовой пояс неправильный, а локальное время правильное. И надо смотреть, где код выполняется - если на сервере - то и все это проверять надо на сервере.
31 Kassern
 
25.02.22
09:21
(28) да ТС полюбому вот сюда долбится за картинкой www.sima-land.ru, вот и не получается
32 artur_fcsm
 
25.02.22
09:24
(31) Вот так я забирал картинку:

    ЧтениеJSON.УстановитьСтроку(ОтветСтрокойДляОбработки);
                Ответ = ПрочитатьJSON(ЧтениеJSON,Ложь);
                ЧтениеJSON.Закрыть();
                Для каждого Параметр из Ответ Цикл
                    Если Параметр.Ключ = "items" Тогда
                        Сообщить(Параметр.Значение);
                        Для каждого Параметр1 из Параметр.Значение Цикл
                                    Фото = Параметр1["photoUrl"];
                                    Сообщить(Фото);
                                    Фото1 = СТРЗаменить(Фото,"https://","http://");
                                    Сообщить(Фото1);
                                    ПутьКФайлу = "D:\Сайт\ФотоПарсинг\Сима\"+АртикулПоставщика+"15.jpg";
                                    КопироватьФайл (Фото, ПутьКФайлу);
33 artur_fcsm
 
25.02.22
09:24
(32) И на одном сайте все прекрасно работало, потому что я забирал картинку по http, а на сайте sima не дает по http. Вот я страдаю(
34 Kassern
 
25.02.22
09:25
(32) рука - лицо...
35 Kassern
 
25.02.22
09:25
когда вы уже запомните, что КопироватьФайл (Фото, ПутьКФайлу); НЕ РАБОТАЕТ С HTTPS! Ну вот от слова совсем. ТОлько с http
36 Kassern
 
25.02.22
09:25
Поэтому вам нужно сделать новое соединение с ssl и получить картинку, как я писал выше
37 artur_fcsm
 
25.02.22
09:26
(35) Вот теперь запомнил, до этого понятия не имел)
38 pechkin
 
25.02.22
09:34
Можно же просто КопироватьФайл
39 Kassern
 
25.02.22
09:38
(38) с https нельзя
40 artur_fcsm
 
25.02.22
09:40
(36) (28) (14) Всем огромное спасибо!
41 acht
 
25.02.22
09:41
(39) Допускается использование схем http, https и ftp для адресации файлов. При использовании этих схем в адресах необходимо указывать прямые слеши '/', а не обратные '\'.
42 acht
 
25.02.22
09:41
(39)
Соединение = Новый HTTPСоединение("www.sima-land.ru", , , , , , Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос("/api/v3/item/?sid=3098609");
Ответ = Соединение.Получить(Запрос);

Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
Содержимое = ПрочитатьJSON(Чтение, Истина);

Товары = Содержимое["items"];
Для Индекс = 0 По Товары.ВГраница() Цикл
    Адрес = Товары[Индекс]["photoUrl"];
    КопироватьФайл(Адрес, "C:\123\" + Формат(Индекс, "ЧН=; ЧГ=") + ".jpg");
КонецЦикла;
43 acht
 
25.02.22
09:42
8.3.20.1674
8.3.18.1520
44 acht
 
25.02.22
09:45
В (35) - яростный п#здеж
45 Kassern
 
25.02.22
10:14
(44) реально работает, думал не поддерживает. Помню в лохматых 14-15 годах пробовал, косячил этот метод, вот и перешел на http соединение для получение картинки для защищенных сайтов.
46 acht
 
25.02.22
10:22
(45) Да, там в лохматых релизах была проблема с сертификатами, КопироватьФайл игнорировала файл cacert.pem платформы что-ли, там вообще же внутри curl =)

Починили, когда научили платформу в хранилище сертификатов ОС ходить.
47 Kassern
 
25.02.22
10:24
(46) ну вот у меня и флешбеки, зарекся этим методом не пользоваться, httpСоединение как-то по универсальней будет, особенно, когда заголовки нужны
48 artur_fcsm
 
25.02.22
10:33
(42) прилетает  -   Недопустимое состояние потока записи JSON
49 Kassern
 
25.02.22
10:36
(48) (42) Все потому что Содержимое = ПрочитатьJSON(Чтение, Истина); - второй параметр зарешал. Раз читаете в соответствие, тогда и обращайтесь к тегам как к соответствию через Получить();
50 Kassern
 
25.02.22
10:37
Если хотите через точку работать со структурой, то второй параметр в ложь (если конечно теги позволяют)
51 artur_fcsm
 
25.02.22
10:39
(49) хоть Истина, хоть ЛОжь. Ошибка та же самая
52 Kassern
 
25.02.22
10:39
(51) на какой строчке ошибка?
53 acht
 
25.02.22
10:40
(48) Что у тебя в Ответ.ПолучитьТелоКакСтроку() находится?
54 Kassern
 
25.02.22
10:41
вот тут гляньте https://forum.infostart.ru/forum9/topic211707/
55 artur_fcsm
 
26.02.22
12:54
(42)
            Адрес = таблица.Найти(АртикулТовара,"артикул").ссылканакартинку;
            Сообщить(Адрес);    
            ПутьКФайлу = "D:\Сайт\ФотоПарсинг\Ермак\"+АртикулТовара+".jpg";
            КопироватьФайл(Адрес, ПутьКФайлу);

Сохраняются пустые картинки. Размер 0. https. Адрес верный, в браузере открывается.
Что опятьт может быть ((
56 acht
 
26.02.22
13:00
(55) Дай-ка протелепатирую, что у тебя в переменной Адрес... А не, все нормально, продолжай.
57 artur_fcsm
 
26.02.22
13:06
(56) я думал, что поверите мне на слово :)) (адрес верный, https)
там вот это: https://ermak-ufa.ru/upload/iblock/dd1/dd1ce4915bd4c9d1c66a149b90f42ce0.jpeg
58 artur_fcsm
 
26.02.22
13:11
На КопироватьФайл(Адрес, ПутьКФайлу); происходит Исключение
59 acht
 
26.02.22
13:22
Несмотря на то, что www.sima-land.ru как-то незаметно превратилась в ermak-ufa.ru, все отлично копируется.

8.3.20.1674
60 artur_fcsm
 
26.02.22
13:24
(59) 1С:Предприятие 8.3 (8.3.18.1289)
неужели в этом проблема ((
61 acht
 
26.02.22
13:26
Такого релиза нет, но в 8.3.18.1520 копируется также отлично.
62 acht
 
26.02.22
13:26
Исключение-то хоть какое?
63 artur_fcsm
 
26.02.22
13:46
(62) Ошибка копирования файлов
по причине:
Ошибка доступа к файлу 'https://ermak-ufa.ru/upload/iblock/dd1/dd1ce4915bd4c9d1c66a149b90f42ce0.jpeg'
по причине:
Ошибка работы с Интернет:  Удаленный узел не прошел проверку
64 acht
 
26.02.22
16:14
(63) > Удаленный узел не прошел проверку
Цепочка сертификатов ему не нравится.
Попробуй вот так: https://its.1c.ru/db/metod8dev/content/5949/hdoc
65 acht
 
26.02.22
16:19
66 Kassern
 
27.02.22
14:31
да блин скачай уже напрямую эту картинку через httpсоединение с ssl, как я писал выше и не мучайся.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс