Почему HTTP запросом из 1С постоянно получаю разные Set-Cookie (не проходит авторизация)

1. Vida 15 14.05.19 16:50 Сейчас в теме
Я только начинаю разбираться в работе с HTTP, прошу подсказки.

В моем понимании должно быть так: отправляю GET, получаю Set-Cookie, из них отправляю нужные Cookie в Заголовки следующего запроса POST, получаю авторизацию.

Но почему-то каждый раз получаю разные Set-Cookie, хотя в Firefox и Postman они каждый раз одинаковые. И там авторизация получается.

В чем подвох?
Вознаграждение за ответ
Показать полностью
Найденные решения
27. 🅵🅾️🆇 522 14.05.19 21:10 Сейчас в теме +0.1 $m
(25) Так какой content-type вы отправляете из постмана?
38. tvm 15.05.19 10:06 Сейчас в теме +0.06 $m
а http-соединение одно и то же используется при получении куков и при отправке второго запроса или снова создается?
44. Vida 15 15.05.19 13:45 Сейчас в теме
ЗАРАБОТАЛО
благодарю всех откликнувшихся!

нашла ошибку

криво передавала Content-Type

надо было
Заголовки.Вставить("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
а до этого что только туда не писала, даже такое:
//Заголовки.Вставить( Новый Структура("Парам, Знч","Content-Type","application/x-www-form-urlencoded;charset=utf-8") );
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. 🅵🅾️🆇 522 14.05.19 17:09 Сейчас в теме
(1) Что пытаетесь сделать?
BasIc auth?
3. Vida 15 14.05.19 17:34 Сейчас в теме
(2)Видимо так, раз в Постмане проходит.
Не особо то разбираюсь какие бывают.
4. 🅵🅾️🆇 522 14.05.19 17:43 Сейчас в теме
(3) Если вы пытаетесь сделать Basic Auth (например такая авторизация по умолчанию у опубликованых в 1с http сервисов, если не указали анонимный режим), то вам надо просто с запросом отправлять заголовок "Authorization" с хэшем логина-пароля.

Альтернативный вариант:
обращаться по url вида http://user:password@domain.tld/uri
из 1с'ки таким образом не пробывал.

Вот еще хинт, если у вас из Postman'а выходит сделать запрос, то там есть кнопочка "Code", нажмите её и увидите как должен выглядеть ваш запрос на куче различных языков, curl и в представлении http.

Что вообще может получаться в Postman, но не получаться в 1с (по личному опыту):
ВСЕГДА-ВСЕГДА-ВСЕГДА смотрите в 1с дебагером код ответа после запроса.
Постман автоматически обрабатывает 3XX коды и делает следующий запрос туда, куда его пересылают, в 1с и остальных языках, естественно, нужно посмотреть в заголовки куда вас перенаправляют (location).
А если вы получили код отличный от 200 - значит надо что то предпринять.

Если не получится - опишите кейс подробнее, выложите кудато снипет кода на 1с и пример получающихся запросов из postman (описаным мной выше способом в синтаксисе curl или http)
6. Vida 15 14.05.19 17:51 Сейчас в теме
(4)Спасибо про "Authorization" не знала, сейчас попробую. (Но из Постман такого не шло)
А как я могла указывать анонимный режим?
9. 🅵🅾️🆇 522 14.05.19 17:55 Сейчас в теме
(6) Вы к http сервисам другой базы 1с подключаетесь?
Если да, то вы в конфиге её публикации можете прописать пользователя по умолчанию (если это действительно ваш кейс и хочется убрать авторизацию - покажу как).

Если к какомуто стороннему ресурсу, то естественно вы этого сделать не сможете.
Если что, куки передаются в заголовках в тч и Get запросов, просто обратил внимание, что второй запрос вы делаете POST.

Как правило он нужен для отправки данных или реализации Rest или WebDav.
Если вы ничего у него в теле не отправляете, вы уверены, что вам нужен именно POST?

То к чему вы подсоединяетесь обладает публичным API, на которое можно посмотреть?

У Postman'а есть отдельная вкладочка для формирования запроса с авторизацией - Auth.
Можете попробывать её нажать, сделать запрос, а потом сформировать код.
10. Vida 15 14.05.19 18:02 Сейчас в теме
18. Vida 15 14.05.19 20:27 Сейчас в теме
(9)Попробовала в Постмане отдельную закладку про авторизацию. Ничего не меняется в ответе сервера: получаю хороший статус и токен.

Отправляю логин пароль в теле запроса.
19. 🅵🅾️🆇 522 14.05.19 20:29 Сейчас в теме
(18) Ну там ничего и не поменяется, если серверу изначально не интересно, что вы ему там отправляете про авторизацию.

Найдите там кнопочку "Code" - может она вам что подскажет.
Ну и попробуйте повторить все тоже самое в консоли которую я вам дал.
16. Vida 15 14.05.19 20:23 Сейчас в теме
(4) Про "Authorization" :
firefox такого заголовка не посылает, постман тоже: в нем указано no Auth

Наверное мне это не нужно.
17. 🅵🅾️🆇 522 14.05.19 20:25 Сейчас в теме
(16) Наверное.
Я же не знаю, что именно вы делаете.
Просто предположил, что Basic Auth.

С помощью консоли HTTP запросов вам надо повторить то что делает браузер и постман.
А уж затем перевести в код 1с.
20. Vida 15 14.05.19 20:36 Сейчас в теме
(17)Посмотрела в code в Постмане. Оказывается он добавляет заголовки
Postman-Token (всегда разный)
и
content-type (этот заголовок также самовольно добавляется в консоле запросов)
он всегда одинаковый, писем если в постмане явно его указываю (то что скопировала и firefox то он игнорирует и подставляет свое)

с помощью консоли запросов мне не понятно (или не поняла как) какой body возвращает сайт вижу только html документ
21. 🅵🅾️🆇 522 14.05.19 20:39 Сейчас в теме
(20) Postman-Token - можете его смело игнорировать, он ничего не значит.

content-type - это уже важный заголовок, постман автоматически добавляет его на основе того, каким образом вы передаете тело в POST запросе.

с помощью консоли запросов мне не понятно (или не поняла как) какой body возвращает сайт вижу только html документ

Ориентируйтесь по коду ответа. На тело не смотрите. Код ответа, если бэк делали не идиоты, скажет вам все что угодно о результате вашего запроса.
22. Vida 15 14.05.19 20:53 Сейчас в теме
(21)content-type значит его нужно включать и в 1с, откуда лучше взять? из консоли?

немного не поняла код ответа 200, но все самое важно в body =
токен, с помощью которого возможны все дальнейшие действия
23. 🅵🅾️🆇 522 14.05.19 20:58 Сейчас в теме
(22) Да, желательно включать.
Он напрямую зависит от того, как и в каком вы формате тела передаете в POST запросе данные.
По хорошему его надо указывать. Но часто бэк его также игнорирует, тк там заранее прописали, в каком именно формате ожидать данные.

В каком, кстати?
form-data, x-www-form-urlencoded, json, двоичными данными, еще дофига и больше способов.

Если код ответа 200 - то все супер.
По идее вы получили тоже самое тело, что получили бы и в Postman
25. Vida 15 14.05.19 21:01 Сейчас в теме
(23)не уверена, в 1с запросе тоже 200 а остальное плохо
26. 🅵🅾️🆇 522 14.05.19 21:03 Сейчас в теме
(25) Ну либо что то делаете не так, либо тот бэк писали наркоманы за дезоморфин.
Никогда не видел, чтоб при ошибке возвращался 200 статус.
27. 🅵🅾️🆇 522 14.05.19 21:10 Сейчас в теме +0.1 $m
(25) Так какой content-type вы отправляете из постмана?
28. Vida 15 14.05.19 21:15 Сейчас в теме
(23)О, спасибо за подсказку, думаю на сайте ожидают в x-www-form-urlencoded (так в браузере)

фирефокс Content-Type: application/x-www-form-urlencoded; charset=UTF-8
всегда одинаково

постман content-type: multipart/form-data; boundary=..............
одинаково

консоль каждый раз по новому формирует:


multipart/form-data; boundary=""4b82ac63-9bd8-4411-a629-8a6b99e69a87""
multipart/form-data; boundary=""45aacc16-af8e-4d58-93e4-d7ae391539b6""



Ой! что-то испортила в консоле - теперь 500 и обратно не получается
29. 🅵🅾️🆇 522 14.05.19 21:18 Сейчас в теме
(28)
Form-data

И

Url encoded

Два координально разных формата.

Form-data вам посложнее будет.

Выясните до завтра какой именно формат вам нужен и пинганите этот комментарий.
35. Vida 15 14.05.19 23:48 Сейчас в теме
(29)Глядя на фф решила что мне нужно таки Url encoded
Увидела, что в постмане есть такой переключатель на закладке body

После его установки самовольный заголовок Content-Type постман больше не подставляет.

Остались 2 самовольных Postman-Token и cache-control: no-cache

cache-control добавила себе, но это не изменило ответ
36. 🅵🅾️🆇 522 14.05.19 23:52 Сейчас в теме
(35)
Form-data позволяет передавать кучу разных типов и файлов

Url encoded это просто запись параметров в теле строкой, таким образом как выб могли их передавать в url, вида:
key1=value1&key2=value2&key3=value3

Лучше подобавляйте себе заголовков из браузера, хуже от них точно не будет.
37. Vida 15 15.05.19 09:50 Сейчас в теме
(36)попробовала отправить то же из терминала
результат как в 1с - каждый раз новая кука

правильно ли я понимаю что постман помимо того что мы видим в code тайно отправляет сохраненные раньше куки?
42. Vida 15 15.05.19 10:49 Сейчас в теме
(36)(40)
О! получилась в терминале получить одинаковую куку:

curl -c /tmp/cookie -b /tmp/cookie -X GET 'https://тут.нужный.адрес/' -H 'cache-control: no-cache'

как это сделать в 1С?
43. Vida 15 15.05.19 10:57 Сейчас в теме
(42)Вот по этой шпаргалке писала:

-c will write cookies to a given file
-b will read cookies from a given file

https://makandracards.com/makandra/48262-how-to-use-cookies-with-curl

curl -c /tmp/cookies ...
запишет куки в временный файл

curl -b /tmp/cookies ...
считает из временного файла
45. 🅵🅾️🆇 522 15.05.19 14:53 Сейчас в теме
(43) Куки передаются просто строкой в заголовке "cookie".
Где вы их будете хранить, в регистре сведений, внешнем файле, справочнике, оперативной памяти на время вызова процедуры, общем модуле с повторно возвращаемым значением или еще где - зависит от вашего кейса и того, что именно вам надо.

Обычно, при общении через API, на них все плюют и не используют.
Они могут понадобится, если вы занимаетесь скраппингом сайта и эмулируете работу обычного клиента через браузер.
46. Vida 15 15.05.19 15:42 Сейчас в теме
(45)
Они могут понадобится, если вы занимаетесь скраппингом сайта и эмулируете работу обычного клиента через браузер.

Видимо так и есть.
24. 🅵🅾️🆇 522 14.05.19 20:59 Сейчас в теме
(22) В консоле HTTP запросов тело возвращается в поле "Результат запроса", только что проверил
30. Vida 15 14.05.19 22:33 Сейчас в теме
(24)У меня только HTML?
Прикрепленные файлы:
31. 🅵🅾️🆇 522 14.05.19 22:39 Сейчас в теме
(30) А что тебе еще надо кроме HTML?
33. Vida 15 14.05.19 23:31 Сейчас в теме
(31)Мне нужен токен.
Это форма авторизации на сайте: логин и пароль.

Отправляю запрос первый раз, получаю Set-Cookie и в том числе AntiForgery.
Отправляю запрос второй раз, подставляя AntiForgery в тело запроса.
А оно мне в ответ: "Status":"WrongAntiForgery" и пустой токен

А когда я так сделала в постмане пришел "Status": "ok" и хороший токен

Оказалось что отправляя кучу раз из постмана, мне приходит одинаковый AntiForgery. из фирефокса тоже одинаковый.

А из 1С второй раз отправляю и опа AntiForgery уже новый и нету токена.

Вот и загадка в том, какого оно для 1с присылает разные куки, если для постмана они одинаковые.
34. 🅵🅾️🆇 522 14.05.19 23:34 Сейчас в теме
(33) Нужно смотреть, что именно схороняет postman и браузер.
У вашего браузера, для сайта, например, аж целых 5 баз данных.
Также по умолчанию в вебе соединение после запроса сразу не рвется и в ближайшие (вроде 10-15 секунд по умолчанию) ожидается еще.

Сейчас не угадаю, что именно у вас не выходило.
32. Vida 15 14.05.19 23:17 Сейчас в теме
(24)Перезаполнила поля сервер и сервис и УРА вышло тело результата.
Такое же как в 1С без токена.
7. spacecraft 14.05.19 17:53 Сейчас в теме
(1) Постман и браузеры довольно интеллектуальные. Они сами обрабатывают перенаправление и показывают готовый результат.
1С это не поддерживает. При перенаправлении необходимо самому обрабатывать логику.
12. Vida 15 14.05.19 18:06 Сейчас в теме
(7)Получаю КодСостояния = 200, значит нету перенаправления?
5. Vida 15 14.05.19 17:49 Сейчас в теме
(4) Location тоже не смотрела тк был код 200, думала все ок.
8. 🅵🅾️🆇 522 14.05.19 17:53 Сейчас в теме
(5) Location вы в постмане и не увидите, он автоматически сделает следующий запрос.
Смотреть надо дебагером в 1с.
11. Vida 15 14.05.19 18:05 Сейчас в теме
(8)Если в 1с КодСостояния = 200, то Location не смотрю или все равно надо?
13. 🅵🅾️🆇 522 14.05.19 18:06 Сейчас в теме
(11) Location надо смотреть только при 3хх кодах.
Если 200 - то все отработало штатно, тк и должно.

Во вложения к сообщению посмотрите, может вам жизнь облегчить
Прикрепленные файлы:
Консоль HTTP запросов.epf
15. Vida 15 14.05.19 18:07 Сейчас в теме
38. tvm 15.05.19 10:06 Сейчас в теме +0.06 $m
а http-соединение одно и то же используется при получении куков и при отправке второго запроса или снова создается?
39. Vida 15 15.05.19 10:21 Сейчас в теме
40. tvm 15.05.19 10:22 Сейчас в теме
41. Vida 15 15.05.19 10:46 Сейчас в теме
(40)это мой первый HTTP запрос

убрала создание нового соединения второй раз
все аналогично

наверное еще что-то делаю мне так
44. Vida 15 15.05.19 13:45 Сейчас в теме
ЗАРАБОТАЛО
благодарю всех откликнувшихся!

нашла ошибку

криво передавала Content-Type

надо было
Заголовки.Вставить("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
а до этого что только туда не писала, даже такое:
//Заголовки.Вставить( Новый Структура("Парам, Знч","Content-Type","application/x-www-form-urlencoded;charset=utf-8") );
47. Xershi 1474 23.11.19 19:24 Сейчас в теме
Бьюсь над похожей задачей. Нужно обновлять куки. Но они имеют сложную структуру https://ru.wikipedia.org/wiki/Cookie#Параметры_cookie
Плюс не всегда отделяются символом ";", бывает ",".
В итоге надо разделить их и корректно обновлять.
Простая замена не подойдет!
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день