|
HTTP соединение: борьба с редиректом | ☑ | ||
---|---|---|---|---|
0
Deal with it
31.05.22
✎
15:51
|
Код обработки:
HTTP = Новый HTTPСоединение(НастройкаОбмена.СерверИсточник, , , , , , Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено)); Попытка Результат = HTTP.Получить(СтрокаПараметраПолучения, ИмяВходящегоФайла); Если Результат.КодСостояния = 200 Тогда Возврат ИмяВходящегоФайла; ИначеЕсли Результат.КодСостояния >= 301 Тогда НомерНачалаАдреса = СтрНайти(Результат.Заголовки["Location"], "/", , , 3); СерверИсточник = Сред(Результат.Заголовки["Location"], 9, НомерНачалаАдреса - 9); СтрокаПараметраПолучения = СтрЗаменить(Результат.Заголовки["Location"], "https://" + СерверИсточник, ""); HTTPЗагрузки = ПолучитьHTTPСоединение(СерверИсточник); Результат = HTTPЗагрузки.Получить(СтрокаПараметраПолучения, ИмяВходящегоФайла); Если Результат.КодСостояния = 200 Тогда Возврат ИмяВходящегоФайла; КонецЕсли; КонецЕсли; Исключение Сообщение.Текст = ОписаниеОшибки(); Сообщение.Сообщить(); Возврат ""; КонецПопытки; |
|||
1
Deal with it
31.05.22
✎
15:51
|
Всё равно возвращает 301. Куков в заголовках нема. Как победить редирект?
|
|||
2
p-soft
31.05.22
✎
15:54
|
порт явно указать бы..
|
|||
3
ptiz
31.05.22
✎
15:57
|
(1) Возможно, сервис хочет не GET, а POST.
|
|||
4
Kassern
31.05.22
✎
16:00
|
(0) по мне так лучше явно прописывать, какой метод нужен. Для этого есть ВызватьHTTPМетод(). По поводу редиректа, вы пробовали в браузере вбить ваш запрос, он так же в 301 переходит, или норм отрабатывает? Вот такое условие ">= 301" не совсем верное, а если вам 400 ошибка прилетит, или 500ая, тогда что?)
|
|||
5
Garykom
гуру
31.05.22
✎
16:06
|
(0) Покажи все заголовки и ответ первого запроса
|
|||
6
Deal with it
31.05.22
✎
16:06
|
(4) да обработка старая, уже не помню когда писал и буквально до сегодняшнего дня все отрабатывало норм.
адрес простой, ссылка на прайс: https://funsamokat.ru/catalog/pricelist/ в браузере не вижу проблем, все открывается. |
|||
7
Garykom
гуру
31.05.22
✎
16:07
|
И ты уверен что "Результат.КодСостояния >= 301" это нормально?
Там коды могут не только редиректа под условие это попасть |
|||
8
Кир Пластелинин
31.05.22
✎
16:08
|
(4) так Получить - GET, ОтправитьДляОбработки - POST. чем не явно то?
|
|||
9
Deal with it
31.05.22
✎
16:08
|
(5) вот заголовки
"Expires" "Tue, 31 May 2022 13:06:23 GMT" "Location" "https://funsamokat.ru/catalog/pricelist" "Connection" "keep-alive" "X-Frame-Options" "SAMEORIGIN" "Content-Type" "text/html; charset=iso-8859-1" "Content-Length" "318" "Cache-Control" "max-age=0" "X-Content-Type-Options" "nosniff" "Date" "Tue, 31 May 2022 13:06:23 GMT" "Server" "nginx" Ответ 301 всегда |
|||
10
H A D G E H O G s
31.05.22
✎
16:11
|
Ну так ползи по редиректу, пока не получишь 200
|
|||
11
Kassern
31.05.22
✎
16:11
|
(8) Не универсально. Можно создать отдельную функцию, которая будет возвращать ответ и передавать в нее нужный метод.
|
|||
12
Deal with it
31.05.22
✎
16:13
|
(10) так адрес в Location ничем не отличается от адреса соединения, в рекурсию не уйти бы
|
|||
13
ptiz
31.05.22
✎
16:15
|
(12) Добавь "/" к концу СтрокаПараметраПолучения
|
|||
14
Garykom
гуру
31.05.22
✎
16:19
|
попробуй так
HTTP = Новый HTTPСоединение(НастройкаОбмена.СерверИсточник, , , , , , Новый ЗащищенноеСоединениеOpenSSL()); СтрокаПараметраПолучения = "/"; Попытка Результат = HTTP.Получить(СтрокаПараметраПолучения, ИмяВходящегоФайла); |
|||
15
Deal with it
31.05.22
✎
16:22
|
(13) получилось! редирект был, но сразу побежден был.
Всем спасибо! |
|||
16
arsik
гуру
31.05.22
✎
16:26
|
Пользуюсь методом из БСП там и редиректы сами определяются и УРЛ сразу парсится.
|
|||
17
Necessitudo
01.06.22
✎
08:11
|
(16) А что за метод?
|
|||
18
arsik
гуру
01.06.22
✎
10:47
|
(17) Ну ка то так
ДопПараметры = Новый Структура;
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |