1. Xershi 391 13.11.17 23:10 Сейчас в теме

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

Написал обработку, которая использует пост и гет запросы.

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

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

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


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


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

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

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

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

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

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

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

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

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

Всем спасибо за участие!
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

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

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

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

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

Системный аналитик
Новосибирск
зарплата от 80 000 руб. до 100 000 руб.
Полный день