vbondarevsky / Connector

Коннектор: удобный HTTP-клиент для 1С:Предприятие 8
Apache License 2.0
638 stars 207 forks source link

Как сохранить cookies при редиректе? #59

Closed RuslanYarytsia closed 2 years ago

RuslanYarytsia commented 3 years ago

Описание проблемы: Есть запрос к сайту с заголовком "contentType = 'application/json'", сайт делает редирект с кодом 308, но при попытке обратится по новому адресу появляется ошибка из-за того что заголовок contentType поменялся с 'application/json' на 'application/octet-stream'

Возможная причина и решение:

В функции ВызватьHTTPМетод если происходит редирект с кодом отличным от 307 и 308 то из куков удаляются заголовки "content-length,content-type,transfer-encoding" в противном случае по идее они должны остаться, но это не происходит, как решение добавил строку кода НовыйHTTPЗапрос.Заголовки = ПодготовленныйЗапрос.Заголовки;

До изменений:

 Если Ответ.КодСостояния <> КодыСостоянияHTTP.ВременноеПеренаправление_307 
    И Ответ.КодСостояния <> КодыСостоянияHTTP.ПостоянноеПеренаправление_308 Тогда
    УдалитьЗаголовки(ПодготовленныйЗапрос.Заголовки, "content-length,content-type,transfer-encoding");
    НовыйHTTPЗапрос.Заголовки = ПодготовленныйЗапрос.Заголовки;
 Иначе
    ИсходныйПоток = ПодготовленныйЗапрос.HTTPЗапрос.ПолучитьТелоКакПоток();
    ИсходныйПоток.КопироватьВ(НовыйHTTPЗапрос.ПолучитьТелоКакПоток());
 КонецЕсли;

После:

 Если Ответ.КодСостояния <> КодыСостоянияHTTP.ВременноеПеренаправление_307 
    И Ответ.КодСостояния <> КодыСостоянияHTTP.ПостоянноеПеренаправление_308 Тогда
    УдалитьЗаголовки(ПодготовленныйЗапрос.Заголовки, "content-length,content-type,transfer-encoding");
    НовыйHTTPЗапрос.Заголовки = ПодготовленныйЗапрос.Заголовки;
 Иначе
    ИсходныйПоток = ПодготовленныйЗапрос.HTTPЗапрос.ПолучитьТелоКакПоток();
    ИсходныйПоток.КопироватьВ(НовыйHTTPЗапрос.ПолучитьТелоКакПоток());
    НовыйHTTPЗапрос.Заголовки = ПодготовленныйЗапрос.Заголовки;
 КонецЕсли;