Авторизация на сайте средствами 1С

1. Xershi 1484 13.11.17 23:10 Сейчас в теме
Написал обработку, которая использует пост и гет запросы.

Когда нет авторизации проблем нет. Все работает!

Но затем потребовалась авторизация на сайте.
Куки = код сесии получил.
А как дальше работать не знаю.

Вот что выдала опера:


В заголовки добавил куки:
СтруктуруПараметровЗапроса = ПолучитьСтруктуруПараметровЗапроса();
	
// Передаем в куках (cookie) PHPSESSID=Объект.КодСесси.
СтруктуруПараметровЗапроса.Заголовки.Вставить("Cookie",		"PHPSESSID=" + Объект.КодСессии);
// Также мы будем передавать в запросе поле keep-alive, чтобы сервер не закрывал наше соединений к нему для повторых запросов.
СтруктуруПараметровЗапроса.Заголовки.Вставить("Connection", "keep-alive");


Выходит надо еще сформировать файл с параметрами?
И в заголовки добавить размер файла?

Проясните ситуацию?
По теме из базы знаний
Найденные решения
20. Xershi 1484 16.11.17 23:54 Сейчас в теме
Нашел в чем была загвоздка!
В тело файла достаточно записать
login=МояПочта&password=МойПароль&from_page=http%3A%2F%2Ftickets.bolshoi.ru%2Fru%2Fticket%2F

То что мне выдала в дате.

Но фишка была в том что метод:
// Записываем содержимое тела в файл отправки
	ТекстовыйФайл = Новый ТекстовыйДокумент;
	ТекстовыйФайл.УстановитьТекст(СтруктураПараметровЗапроса.ТекстФайла);          
	ТекстовыйФайл.Записать(ИмяФайлаЗапроса, КодировкаТекста.UTF8);
	ФайлОтправки = Новый Файл(ИмяФайлаЗапроса);

	// Отсылаем POST запрос на обработку.
	// АдресРесурса — ссылка на веб-сервер (страницу), к которой посылается POST запрос
	// Выполним POST запрос через URL
	HTTPЗапрос = Новый HTTPЗапрос(СтруктураПараметровЗапроса.АдресРесурса, СтруктураПараметровЗапроса.Заголовки);     
	HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаЗапроса);
	
Показать


Не работал.
Переписал на:
HTTPЗапрос = Новый HTTPЗапрос(СтруктураПараметровЗапроса.АдресРесурса, СтруктураПараметровЗапроса.Заголовки);     
	//HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаЗапроса);
	HTTPЗапрос.УстановитьТелоИзСтроки(СтруктураПараметровЗапроса.ТекстФайла, КодировкаТекста.UTF8);

И получил заветный вход! Кто скажет в чем отличие? В том что я файл отправлял с расширением хмл?

Подсказку нашел тут: http://www.forum.mista.ru/topic.php?id=711093
baracuda; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. spacecraft 14.11.17 00:16 Сейчас в теме
(1) из вышеприведенного не увидел требование посылать файл.
Помещение куки в заголовки не помогает?
Как понимаю API нет?
3. Xershi 1484 14.11.17 01:21 Сейчас в теме
(2) да апи нет, приходится самому парсить.
Да выдает ошибку.
4. spacecraft 14.11.17 08:18 Сейчас в теме
(3) нужно смотреть тело. Учитывая, что браузер использует "Content-Type:application/x-www-form-urlencoded "...
а сервер "Content-Type:text/xml; charset=UTF-8", можно предположить, что и через xml в теле можно общаться. Но без API это трудно будет сделать.
5. Xershi 1484 14.11.17 14:06 Сейчас в теме
(4) и как это делается?
То что нашел в ИС мало прояснило ситуацию.
6. spacecraft 14.11.17 14:15 Сейчас в теме
(5) смотреть, что браузер отправляет уже с авторизацией.
Может быть в uri включаться. Может в теле передаваться.
Но может и js использовать. Учитывая, что используется форма...
7. Xershi 1484 14.11.17 16:05 Сейчас в теме
(6) так вот в теме и я написал что оно мне выдало.

Request Headers

Это я так понимаю то что я отправил в заголовках.

А Form Data как отправляется?
8. spacecraft 14.11.17 16:22 Сейчас в теме
(7) я же говорю, надо смотреть не только заголовки. Что в теле.
Судя по ответу с "Referer:http://tickets.bolshoi.ru/ru/performance/12089/ " приходит xml в теле.
Надо смотреть, что в теле отправляется.

Вот, что приходит:
<?xml version="1.0"  encoding="utf-8" ?>
<?xml-stylesheet href="/style__ru.xslt?15" type="text/xsl" ?>
<root sid="lonmhn6hcg1h9oqti7avj7uf94" idclient="0" lang_link="/en/performance/12089/" link="/performance/12089/">  <client/> <content>
<spec_free_place_pict>
<spectacle_info><date>17 ноября 2017, пятница</date>
<time>19:00</time>
<date2>17.11.2017</date2>
<name>ДОН КАРЛОС (12+)</name>
<hall>Историческая сцена</hall>
<idhall>11</idhall>
<id>12089</id>
<type>Опера</type>
<tarif/>
<axtrp>0</axtrp>
<eticket>1</eticket>
</spectacle_info>
<ticket><tid>10072069</tid>
<tregion>Партер</tregion>
<tside>Левая сторона</tside>
<trow>Ряд 11</trow>
<tplace>Место 30</tplace>
<tprice1>7000</tprice1>
<xcoord>611</xcoord>
<ycoord>435</ycoord>
<pid>20366</pid>
</ticket>

<spec_schedule><spectacle>
<spec_date>15 ноября</spec_date>
<id_spec>12087</id_spec>
</spectacle>
<spectacle>
<spec_date>16 ноября</spec_date>
<id_spec>12088</id_spec>
</spectacle>
<spectacle>
<spec_date>17 ноября</spec_date>
<id_spec>12089</id_spec>
</spectacle>
<spectacle>
<spec_date>18 ноября</spec_date>
<id_spec>12090</id_spec>
</spectacle>
<spectacle>
<spec_date>19 ноября</spec_date>
<id_spec>12091</id_spec>
</spectacle>
<spectacle_prev>
<date>15 ноября</date>
<id_spec>12087</id_spec>
</spectacle_prev>
<spectacle_next>
<date>19 ноября</date>
<id_spec>12091</id_spec>
</spectacle_next>
</spec_schedule>
</spec_free_place_pict> </content>
 <help><text>Вы можете выбрать интересующие Вас билеты. После выбора, нажмите на кнопку «Поместить в корзину».</text> </help></root>
Показать
9. Xershi 1484 14.11.17 16:37 Сейчас в теме
(8) это приходит без авторизации - места.
Мне надо понять как провести авторизацию и после этого отправить запрос на нужные места.

Что отправлять я в опере вижу, не могу понять как это сделать в 1С.
10. 🅵🅾️🆇 523 14.11.17 17:26 Сейчас в теме
(9)
Вот что выдала опера:


Ну опера показала заголовки.
Вопрос в том, как отсылать заголовки из 1с?

Так:
Заголовки	= Новый Соответствие();
Заголовки.Вставить("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
Заголовки.Вставить("Accept-Encoding", "gzip, deflate");
Заголовки.Вставить("Accept-Language", "en-US,en;q=0.8,ru;q=0.6");
Заголовки.Вставить("Cache-Control", "max-age=0");
Заголовки.Вставить("Connection", "keep-alive");

HTTPЗапрос		= Новый HTTPЗапрос(URL, Заголовки);
Показать


OFFTOPIC: Качество сайта под стать искусству?
Прикрепленные файлы:
11. Xershi 1484 14.11.17 17:36 Сейчас в теме
(10) заголовки я умею отсылать.

Что с этим делать:

А Form Data как отправляется?
12. 🅵🅾️🆇 523 14.11.17 17:42 Сейчас в теме
(11) Я не большой знаток веба, но это вроде опера подсказывает заполнение форм (<input> и всего такого).
Если так, то их Вы вполне можете заполнить через DOM.

Не хочу открывать 1с, покажу как средствами JS, для 1с также:
document.getElementsByName('login')[0].value = '123'
document.getElementById('password').value = '123'


Также рекомендую отлаживать через хром или традиционно через мозилу с firebug.
13. Xershi 1484 14.11.17 18:10 Сейчас в теме
(12) ну это понятно, просто поняв принципы работы было бы легко начать отладку, а пока не понятно, как это работает. В интернете есть статья как формировать хмл файл тела для отправки, но пока не понял как это применить. И в правильном ли напралении ли думаю.
14. 🅵🅾️🆇 523 14.11.17 18:13 Сейчас в теме
(13) Не, на самом деле все гораздо проще:
ТЫК (у вас "POST с urlencoded" и вид "application/x-www-form-urlencoded")

Не вижу проблемы на первый взгляд заполнить форму способом, что Я показал.

Сайт у них на битриксе, советую связаться с разработчиками, наверняка у них есть какоет API для простого решения.
Неужели два продукта 1с нельзя подружить из коробки?)))

Если остануться вопросы - пишите, Я уведомления обычно читаю, попробую помочь завтра :)

OFFTOPIC: битрикс в сочетании с лебедевым - злая штука, сыпется куча ошибок, да еще и грузиться 6 секунд.
15. Xershi 1484 14.11.17 18:29 Сейчас в теме
(14) про 9 пост http://www.forum.mista.ru/topic.php?id=680146 я прочитал.
Но авторизация это просто первый шаг на самом деле, дальше нужно будет и другое действие выполнить.

Похоже ваша ссылка дает пищу для анализа:
Форма при такой кодировке будет выглядеть примерно так:
...Заголовки...
Content-Type: multipart/form-data; boundary=RaNdOmDeLiMiTeR

--RaNdOmDeLiMiTeR
Content-Disposition: form-data; name="name"

Виктор
--RaNdOmDeLiMiTeR
Content-Disposition: form-data; name="surname"

Цой
--RaNdOmDeLiMiTeR--
Показать


Теперь становятся понятны выкладки про boundary. Думаю что-то должно получиться.
16. 🅵🅾️🆇 523 14.11.17 19:20 Сейчас в теме
17. Xershi 1484 15.11.17 21:55 Сейчас в теме
Я зашел на страницу
http://tickets.bolshoi.ru/ru/ticket/

Гет запросом получил куки.

После ввода пароля на сайте я вижу редирект:
Referer:http://tickets.bolshoi.ru/login.php

Т.е. указав параметры я смогу получить больше информации.

Поставил программу:
HTTPAnalyzer

Она сразу выдала. Нужные запросы
18. spacecraft 15.11.17 22:49 Сейчас в теме
(17)
Поставил программу:
HTTPAnalyzer

Она сразу выдала. Нужные запросы

Поздравляю. Я об этом в (6) и говорил: "смотреть, что браузер отправляет уже с авторизацией."
19. Xershi 1484 15.11.17 23:56 Сейчас в теме
(18) опера не показывала что делает: http://tickets.bolshoi.ru/login.php

Она сразу на последнюю скидывала: http://tickets.bolshoi.ru/ru/ticket/

Не могу понять что в файл нужно записать:
POST /login.php HTTP/1.1
Host: tickets.bolshoi.ru
Connection: keep-alive
Content-Length: 108
Cache-Control: max-age=0
Origin: http://tickets.bolshoi.ru
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.52
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
DNT: 1
Referer: http://tickets.bolshoi.ru/ru/ticket/
Accept-Encoding: gzip, deflate
Accept-Language: ru,en;q=0.8
Cookie: _ym_uid=15106017911070951459; PHPSESSID=36702nd26qp65qoo9ehg6iov72; _ga=GA1.2.1235324497.1510601004; _gid=GA1.2.1135985381.1510601004

login=МояПочта&password=МойПароль&from_page=http%3A%2F%2Ftic­kets.bolshoi.ru%2Fru%2Fticket%2F
Показать


Писал этот текст не работает. Ошибка:
<ht ml><body>Ошибка в параметрах !<sc ript>setTimeout("document.location.replace('http://tickets.bolshoi.ru/')", 1000);</sc ript></body></html>


Другие варианты:
login=МояПочта&password=МойПароль&from_page=http%3A%2F%2Ftickets.bolshoi.ru%2Fru%2Fticket%2F

И
 /login.php

login=МояПочта&password=МойПароль&from_page=http%3A%2F%2Ftic­kets.bolshoi.ru%2Fru%2Fticket%2F


В качестве разделителя использовал Символы.ПС. Но тоже не работает.
20. Xershi 1484 16.11.17 23:54 Сейчас в теме
Нашел в чем была загвоздка!
В тело файла достаточно записать
login=МояПочта&password=МойПароль&from_page=http%3A%2F%2Ftickets.bolshoi.ru%2Fru%2Fticket%2F

То что мне выдала в дате.

Но фишка была в том что метод:
// Записываем содержимое тела в файл отправки
	ТекстовыйФайл = Новый ТекстовыйДокумент;
	ТекстовыйФайл.УстановитьТекст(СтруктураПараметровЗапроса.ТекстФайла);          
	ТекстовыйФайл.Записать(ИмяФайлаЗапроса, КодировкаТекста.UTF8);
	ФайлОтправки = Новый Файл(ИмяФайлаЗапроса);

	// Отсылаем POST запрос на обработку.
	// АдресРесурса — ссылка на веб-сервер (страницу), к которой посылается POST запрос
	// Выполним POST запрос через URL
	HTTPЗапрос = Новый HTTPЗапрос(СтруктураПараметровЗапроса.АдресРесурса, СтруктураПараметровЗапроса.Заголовки);     
	HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаЗапроса);
	
Показать


Не работал.
Переписал на:
HTTPЗапрос = Новый HTTPЗапрос(СтруктураПараметровЗапроса.АдресРесурса, СтруктураПараметровЗапроса.Заголовки);     
	//HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаЗапроса);
	HTTPЗапрос.УстановитьТелоИзСтроки(СтруктураПараметровЗапроса.ТекстФайла, КодировкаТекста.UTF8);

И получил заветный вход! Кто скажет в чем отличие? В том что я файл отправлял с расширением хмл?

Подсказку нашел тут: http://www.forum.mista.ru/topic.php?id=711093
baracuda; +1 Ответить
21. Xershi 1484 17.11.17 00:48 Сейчас в теме
Все по аналогии и все остальные действия сработали!

Всем спасибо за участие!
22. Zlaya-Ferio 3 22.03.22 10:49 Сейчас в теме
Блин, а у меня не получается УстановитьТелоИзСтроки... Сервер вообще перестал отвечать на такие запросы. А вот УстановитьИмяФайлаТела работает на ура во всех случаях. Там главное, чтоб файлик формировался верно
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот