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

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

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

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

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


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


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

Проясните ситуацию?
По теме из базы знаний
Найденные решения
20. Xershi 1474 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 1474 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 1474 14.11.17 14:06 Сейчас в теме
(4) и как это делается?
То что нашел в ИС мало прояснило ситуацию.
6. spacecraft 14.11.17 14:15 Сейчас в теме
(5) смотреть, что браузер отправляет уже с авторизацией.
Может быть в uri включаться. Может в теле передаваться.
Но может и js использовать. Учитывая, что используется форма...
7. Xershi 1474 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 1474 14.11.17 16:37 Сейчас в теме
(8) это приходит без авторизации - места.
Мне надо понять как провести авторизацию и после этого отправить запрос на нужные места.

Что отправлять я в опере вижу, не могу понять как это сделать в 1С.
10. 🅵🅾️🆇 522 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 1474 14.11.17 17:36 Сейчас в теме
(10) заголовки я умею отсылать.

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

А Form Data как отправляется?
12. 🅵🅾️🆇 522 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 1474 14.11.17 18:10 Сейчас в теме
(12) ну это понятно, просто поняв принципы работы было бы легко начать отладку, а пока не понятно, как это работает. В интернете есть статья как формировать хмл файл тела для отправки, но пока не понял как это применить. И в правильном ли напралении ли думаю.
14. 🅵🅾️🆇 522 14.11.17 18:13 Сейчас в теме
(13) Не, на самом деле все гораздо проще:
ТЫК (у вас "POST с urlencoded" и вид "application/x-www-form-urlencoded")

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

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

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

OFFTOPIC: битрикс в сочетании с лебедевым - злая штука, сыпется куча ошибок, да еще и грузиться 6 секунд.
15. Xershi 1474 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. 🅵🅾️🆇 522 14.11.17 19:20 Сейчас в теме
17. Xershi 1474 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 1474 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 1474 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 1474 17.11.17 00:48 Сейчас в теме
Все по аналогии и все остальные действия сработали!

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

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

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

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

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