Здравствуйте коллеги
Много лет использовали интернет магазин на битриксе и свою самописную обработку по загрузке-выгрузке данных из 1с 7.7 в него и наоборот. Все работало как часы.
Но вот битрикс внезапно скончался и прежде чем его реанимировать, решила я оглядеться вокруг - а что еще у нас есть для магазинов?
Наткнулась на InSales - внешне понравился, стала пробовать адаптировать свою старую обработку под него, благо объявлено что протокол обмена используется 1с-овский, стандартный, и столкнулась с неожиданной проблемой:
- во-первых обработка использовала v7plus для работы, а в нем нет https
Ну хорошо, перешла на WinHttp.WinHttpRequest.5.1 - и тут наткнулась на
- во-вторых, WinHttpRequest не хочет принимать заголовок "Cookie" для установки куки, полученной от сайта
Итак, я делаю
Получаю в ответ
Ну ладно, сервер в качестве разделителя строк использует только "\n" - это можно пережить
Теперь, мне надо по феншую засунуть "exchange_session=*****************************************" в куку
Я пыталась:
Но получаю ошибку:
И? Какие есть у кого мысли - как засунуть куку в заголовок запроса?
Много лет использовали интернет магазин на битриксе и свою самописную обработку по загрузке-выгрузке данных из 1с 7.7 в него и наоборот. Все работало как часы.
Но вот битрикс внезапно скончался и прежде чем его реанимировать, решила я оглядеться вокруг - а что еще у нас есть для магазинов?
Наткнулась на InSales - внешне понравился, стала пробовать адаптировать свою старую обработку под него, благо объявлено что протокол обмена используется 1с-овский, стандартный, и столкнулась с неожиданной проблемой:
- во-первых обработка использовала v7plus для работы, а в нем нет https
Ну хорошо, перешла на WinHttp.WinHttpRequest.5.1 - и тут наткнулась на
- во-вторых, WinHttpRequest не хочет принимать заголовок "Cookie" для установки куки, полученной от сайта
Итак, я делаю
Соединение = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
Соединение.Open("GET", СокрЛП(АдресСервера) + "?type=sale&mode=checkauth", 0);
Соединение.SetCredentials(СокрЛП(Имя), СокрЛП(Пароль), 0);
Соединение.Send("");
Получаю в ответ
successexchange_session*****************************************Ну ладно, сервер в качестве разделителя строк использует только "\n" - это можно пережить
Теперь, мне надо по феншую засунуть "exchange_session=*****************************************" в куку
Я пыталась:
Печенька = "exchange_session=" + Сред(Соединение.ResponseText,25);
Соединение.Open("GET", СокрЛП(АдресСервера) + "?type=sale&mode=init", 0);
Соединение.SetRequestHeader("Cookie", Печенька);
Соединение.Send("");
Но получаю ошибку:
Соединение.SetRequestHeader("Cookie", Печенька);
{*******.ERT(679)}: WinHttp.WinHttpRequest: Параметр задан неверно.И? Какие есть у кого мысли - как засунуть куку в заголовок запроса?
По теме из базы знаний
- Готовим Soap для Web-сервисов. Рецепты
- Использование объекта "HTTPСоединение" для отправки и получения SMS сообщений через модем Huawei с прошивкой HiLink (Возможности на 8.3.11.3034)
- Запрос цены товара с сайта apteka.ru
- Создание простых сайтов на основе http сервисов - tips and tricks
- HTTP, Ajax, JSON: Один год Pet-проекту на 1С
Найденные решения
(5)
Именно оба действия - передача логина и пароля с каждым обращением и установка печеньки в заголовке привела к решению вопроса.
В общем, вроде удалось обойти проблему - передаю с каждым запросом имя и пароль (печеньку тоже пытаюсь засунуть в заголовок, но не уверена что получается):
Именно оба действия - передача логина и пароля с каждым обращением и установка печеньки в заголовке привела к решению вопроса.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Так, ладно, зря я написала что "\n" - не проблема, заменила на РазделительСтрок:
1С перестала ругаться на SetRequestHeader, но теперь Соединение.Status = 401 - не авторизован :(
И что? Как передать куку то?
Ответ = СтрЗаменить(Соединение.ResponseText, Симв(10), РазделительСтрок);
Печенька = СтрПолучитьСтроку(Ответ, 2) + "=" + СтрПолучитьСтроку(Ответ,3);
Соединение.Open("GET", СокрЛП(АдресСервера) + "?type=sale&mode=init", 0);
Соединение.SetRequestHeader("Cookie", Печенька);
Соединение.Send("");1С перестала ругаться на SetRequestHeader, но теперь Соединение.Status = 401 - не авторизован :(
И что? Как передать куку то?
В общем, вроде удалось обойти проблему - передаю с каждым запросом имя и пароль (печеньку тоже пытаюсь засунуть в заголовок, но не уверена что получается):
Код постепенно оптимизируется, так что не удивляйтесь
Теперь другая проблема - не могу получить файл :(
//Соединение = СоздатьОбъект("msxml2.serverxmlhttp.6.0");
Соединение = СоздатьОбъект("winhttp.winhttprequest.5.1");
Функция ПолучитьДанные(Соединение, Операция)
Если ТипЗначенияСтр(Соединение) = "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;
КонецФункции
ПоказатьКод постепенно оптимизируется, так что не удивляйтесь
Теперь другая проблема - не могу получить файл :(
(5)
Именно оба действия - передача логина и пароля с каждым обращением и установка печеньки в заголовке привела к решению вопроса.
В общем, вроде удалось обойти проблему - передаю с каждым запросом имя и пароль (печеньку тоже пытаюсь засунуть в заголовок, но не уверена что получается):
Именно оба действия - передача логина и пароля с каждым обращением и установка печеньки в заголовке привела к решению вопроса.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот