Здравствуйте коллеги
Много лет использовали интернет магазин на битриксе и свою самописную обработку по загрузке-выгрузке данных из 1с 7.7 в него и наоборот. Все работало как часы.
Но вот битрикс внезапно скончался и прежде чем его реанимировать, решила я оглядеться вокруг - а что еще у нас есть для магазинов?
Наткнулась на InSales - внешне понравился, стала пробовать адаптировать свою старую обработку под него, благо объявлено что протокол обмена используется 1с-овский, стандартный, и столкнулась с неожиданной проблемой:

 - во-первых обработка использовала v7plus для работы, а в нем нет https

Ну хорошо, перешла на WinHttp.WinHttpRequest.5.1 - и тут наткнулась на
  - во-вторых, WinHttpRequest не хочет принимать заголовок "Cookie" для установки куки, полученной от сайта

Итак, я делаю

```1c
    Соединение = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
    Соединение.Open("GET", СокрЛП(АдресСервера) + "?type=sale&mode=checkauth", 0);
    Соединение.SetCredentials(СокрЛП(Имя), СокрЛП(Пароль), 0);
    Соединение.Send(");
```

Получаю в ответ

```1c
    successexchange_session*****************************************
```

Ну ладно, сервер в качестве разделителя строк использует только "\n" - это можно пережить
Теперь, мне надо по феншую засунуть "exchange_session=*****************************************" в куку
Я пыталась:

```1c
    Печенька = "exchange_session=" + Сред(Соединение.ResponseText,25);
    Соединение.Open("GET", СокрЛП(АдресСервера) + "?type=sale&mode=init", 0);
    Соединение.SetRequestHeader("Cookie", Печенька);
    Соединение.Send(");
```

Но получаю ошибку:

```1c
    Соединение.SetRequestHeader("Cookie", Печенька);
    {*******.ERT(679)}: WinHttp.WinHttpRequest: Параметр задан неверно.
```

И? Какие есть у кого мысли - как засунуть куку в заголовок запроса?
---
В общем, вроде удалось обойти проблему - передаю с каждым запросом имя и пароль (печеньку тоже пытаюсь засунуть в заголовок, но не уверена что получается):
Именно оба действия - передача логина и пароля с каждым обращением и установка печеньки в заголовке привела к решению вопроса.
---
Так, ладно, зря я написала что "\n" - не проблема, заменила на РазделительСтрок:

```1c
    Ответ = СтрЗаменить(Соединение.ResponseText, Симв(10), РазделительСтрок);
    Печенька = СтрПолучитьСтроку(Ответ, 2) + "=" + СтрПолучитьСтроку(Ответ,3);
    Соединение.Open("GET", СокрЛП(АдресСервера) + "?type=sale&mode=init", 0);
    Соединение.SetRequestHeader("Cookie", Печенька);
    Соединение.Send(");
```

1С перестала ругаться на SetRequestHeader, но теперь Соединение.Status = 401 - не авторизован :(
И что? Как передать куку то?
---
И что?
И документация, чтение которой все 1Сники считают ниже своего великого достоинства.

Оно по умолчанию управляет куками автоматически:
https://learn.microsoft.com/en-us/windows/win32/winhttp/cookie-handling-in-winhttp

Хочешь вручную - выстави опцию WINHTTP_DISABLE_COOKIES
---
Хм, спасибо за ответ, но как это сделать в OLE объекте WinHttp.WinHttpRequest?
---
В общем, вроде удалось обойти проблему - передаю с каждым запросом имя и пароль (печеньку тоже пытаюсь засунуть в заголовок, но не уверена что получается):

```1c
    //Соединение = СоздатьОбъект("msxml2.serverxmlhttp.6.0");
    Соединение = СоздатьОбъект("winhttp.winhttprequest.5.1");
```

```1c
    Функция ПолучитьДанные(Соединение, Операция)

    Если ТипЗначенияСтр(Соединение) = "OLE.IServerXMLHTTPRequest2" Тогда
    Соединение.Open("GET", ПараметрыЗапроса.АдресСервера + "?type=" + ПараметрыЗапроса.ТипЗапроса + "&mode=" + Операция, 0, ПараметрыЗапроса.ИмяПользователя, ПараметрыЗапроса.ПарольПользователя);
    ИначеЕсли ТипЗначенияСтр(Соединение) = "OLE.IWinHttpRequest" Тогда
    Соединение.Open("GET", ПараметрыЗапроса.АдресСервера + "?type=" + ПараметрыЗапроса.ТипЗапроса + "&mode=" + Операция, 0);
    Соединение.SetCredentials(ПараметрыЗапроса.ИмяПользователя, ПараметрыЗапроса.ПарольПользователя, 0);
    КонецЕсли;
    Если ПустоеЗначение(ПараметрыЗапроса.Печенька) = 0 Тогда
    Соединение.SetRequestHeader("Cookie", ПараметрыЗапроса.Печенька);
    КонецЕсли;
    Соединение.Send(");

    Если Соединение.Status <> 200 Тогда

    глСервис.ИконкаПредупреждения(1,1,);
    Предупреждение(Строка(Соединение.Status) + РазделительСтрок + Соединение.statusText);
    глСервис.ИконкаПредупреждения(1,,1);
    Возврат 0;

    КонецЕсли;

    Возврат 1;

    КонецФункции
```

Код постепенно оптимизируется, так что не удивляйтесь
Теперь другая проблема - не могу получить файл :(
---
В общем, вроде удалось обойти проблему - передаю с каждым запросом имя и пароль (печеньку тоже пытаюсь засунуть в заголовок, но не уверена что получается):
Именно оба действия - передача логина и пароля с каждым обращением и установка печеньки в заголовке привела к решению вопроса.