Я только начинаю разбираться в работе с HTTP, прошу подсказки.
В моем понимании должно быть так: отправляю GET, получаю Set-Cookie, из них отправляю нужные Cookie в Заголовки следующего запроса POST, получаю авторизацию.
Но почему-то каждый раз получаю разные Set-Cookie, хотя в Firefox и Postman они каждый раз одинаковые. И там авторизация получается.
надо было
Заголовки.Вставить("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
а до этого что только туда не писала, даже такое:
//Заголовки.Вставить( Новый Структура("Парам, Знч","Content-Type","application/x-www-form-urlencoded;charset=utf-8") );
(3) Если вы пытаетесь сделать Basic Auth (например такая авторизация по умолчанию у опубликованых в 1с http сервисов, если не указали анонимный режим), то вам надо просто с запросом отправлять заголовок "Authorization" с хэшем логина-пароля.
Вот еще хинт, если у вас из Postman'а выходит сделать запрос, то там есть кнопочка "Code", нажмите её и увидите как должен выглядеть ваш запрос на куче различных языков, curl и в представлении http.
Что вообще может получаться в Postman, но не получаться в 1с (по личному опыту):
ВСЕГДА-ВСЕГДА-ВСЕГДА смотрите в 1с дебагером код ответа после запроса.
Постман автоматически обрабатывает 3XX коды и делает следующий запрос туда, куда его пересылают, в 1с и остальных языках, естественно, нужно посмотреть в заголовки куда вас перенаправляют (location).
А если вы получили код отличный от 200 - значит надо что то предпринять.
Если не получится - опишите кейс подробнее, выложите кудато снипет кода на 1с и пример получающихся запросов из postman (описаным мной выше способом в синтаксисе curl или http)
(6) Вы к http сервисам другой базы 1с подключаетесь?
Если да, то вы в конфиге её публикации можете прописать пользователя по умолчанию (если это действительно ваш кейс и хочется убрать авторизацию - покажу как).
Если к какомуто стороннему ресурсу, то естественно вы этого сделать не сможете.
Если что, куки передаются в заголовках в тч и Get запросов, просто обратил внимание, что второй запрос вы делаете POST.
Как правило он нужен для отправки данных или реализации Rest или WebDav.
Если вы ничего у него в теле не отправляете, вы уверены, что вам нужен именно POST?
То к чему вы подсоединяетесь обладает публичным API, на которое можно посмотреть?
У Postman'а есть отдельная вкладочка для формирования запроса с авторизацией - Auth.
Можете попробывать её нажать, сделать запрос, а потом сформировать код.
(17)Посмотрела в code в Постмане. Оказывается он добавляет заголовки
Postman-Token (всегда разный)
и
content-type (этот заголовок также самовольно добавляется в консоле запросов)
он всегда одинаковый, писем если в постмане явно его указываю (то что скопировала и firefox то он игнорирует и подставляет свое)
с помощью консоли запросов мне не понятно (или не поняла как) какой body возвращает сайт вижу только html документ
(22) Да, желательно включать.
Он напрямую зависит от того, как и в каком вы формате тела передаете в POST запросе данные.
По хорошему его надо указывать. Но часто бэк его также игнорирует, тк там заранее прописали, в каком именно формате ожидать данные.
В каком, кстати?
form-data, x-www-form-urlencoded, json, двоичными данными, еще дофига и больше способов.
Если код ответа 200 - то все супер.
По идее вы получили тоже самое тело, что получили бы и в Postman
(43) Куки передаются просто строкой в заголовке "cookie".
Где вы их будете хранить, в регистре сведений, внешнем файле, справочнике, оперативной памяти на время вызова процедуры, общем модуле с повторно возвращаемым значением или еще где - зависит от вашего кейса и того, что именно вам надо.
Обычно, при общении через API, на них все плюют и не используют.
Они могут понадобится, если вы занимаетесь скраппингом сайта и эмулируете работу обычного клиента через браузер.
(31)Мне нужен токен.
Это форма авторизации на сайте: логин и пароль.
Отправляю запрос первый раз, получаю Set-Cookie и в том числе AntiForgery.
Отправляю запрос второй раз, подставляя AntiForgery в тело запроса.
А оно мне в ответ: "Status":"WrongAntiForgery" и пустой токен
А когда я так сделала в постмане пришел "Status": "ok" и хороший токен
Оказалось что отправляя кучу раз из постмана, мне приходит одинаковый AntiForgery. из фирефокса тоже одинаковый.
А из 1С второй раз отправляю и опа AntiForgery уже новый и нету токена.
Вот и загадка в том, какого оно для 1с присылает разные куки, если для постмана они одинаковые.
(33) Нужно смотреть, что именно схороняет postman и браузер.
У вашего браузера, для сайта, например, аж целых 5 баз данных.
Также по умолчанию в вебе соединение после запроса сразу не рвется и в ближайшие (вроде 10-15 секунд по умолчанию) ожидается еще.
(1) Постман и браузеры довольно интеллектуальные. Они сами обрабатывают перенаправление и показывают готовый результат.
1С это не поддерживает. При перенаправлении необходимо самому обрабатывать логику.
надо было
Заголовки.Вставить("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
а до этого что только туда не писала, даже такое:
//Заголовки.Вставить( Новый Структура("Парам, Знч","Content-Type","application/x-www-form-urlencoded;charset=utf-8") );
Бьюсь над похожей задачей. Нужно обновлять куки. Но они имеют сложную структуру https://ru.wikipedia.org/wiki/Cookie#Параметры_cookie Плюс не всегда отделяются символом ";", бывает ",".
В итоге надо разделить их и корректно обновлять.
Простая замена не подойдет!