|
Скачать картинку по 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, как я писал выше и не мучайся.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |