0. barelpro 1002 04.02.14 02:29 Сейчас в теме

Пример работы с заголовками HTTP-запросов: загрузка версий программ с users.v8.1c.ru

Узнайте больше о HTTP-запросах и о программной работе с сайтами, требующими авторизацию

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. artspeed 176 05.02.14 05:26 Сейчас в теме
Скачал, развернул конфу, открыл, ввел логин и пароль. Загрузка версий - кнопочка просто не работает. Загрузка - программ - долго думает и заканчивает свое действие без результата((

В общем не работоспособная конфа((
Очень жаль

Испытывал на 8.2.19.80
2. barelpro 1002 05.02.14 08:36 Сейчас в теме
(1) artspeed,

Что-то с вашим логином и паролем не так. В браузере со страницы login.1c.ru куда он приводит? Отладчиком на какой строке зависает? Дайте больше информации!
6. barelpro 1002 05.02.14 11:14 Сейчас в теме
(1) artspeed, (3) arteast,

Проблема решена, выложено обновление от 05.02.2014 11:54
Повторная закачка не списывает стартмани :)
73. info@itshkola.com 21.03.16 21:37 Сейчас в теме
3. arteast 99 05.02.14 09:53 Сейчас в теме
Не работает.
В режиме Предприятия вообще никаких действий не производит.
Пробовал на платформе 1С:Предприятие 8.3 (8.3.4.389).

В отладке:
Соединение проходит удачно, авторизация тоже...а вот дальше
http://joxi.ru/xNHxUv3JTJBmeSOOWH4
5. barelpro 1002 05.02.14 10:20 Сейчас в теме
(3) arteast,

мне чтобы понять, что не так, нужен ваш логин-пароль. Пришлите в личку, потом поменяете.
4. StaticUnsafe 05.02.14 10:19 Сейчас в теме
7. pahich 559 05.02.14 16:30 Сейчас в теме
Спасибо, забрал в личную коллекцию )
8. barelpro 1002 05.02.14 16:32 Сейчас в теме
Люди, скачали уже 23 человека, скажите хоть работает? успокойте меня! )))))
9. John_d 536 05.02.14 16:49 Сейчас в теме
Спасибо за статью. Все работает.
Круто можно методом пост отправлять данные из 1с на сайт без посредников)
Alexoniq; barelpro; +2 Ответить
10. John_d 536 05.02.14 17:48 Сейчас в теме
Можете подсказать как правильно указать параметры post? чтобы они в глобальный массив post пришли на сайте
так:
HTTPЗапрос1.Заголовки.Вставить("name=" + name + "&col=" + kol);
11. barelpro 1002 05.02.14 18:29 Сейчас в теме
(10)
Если запрос Post, то обязательно должно быть заполнено тело запроса через УстановитьТелоИзСтроки. Например, так:

HTTPЗапрос2 = Новый HTTPЗапрос;
HTTPЗапрос2.Заголовки.Вставить("Connection", "keep-alive");
HTTPЗапрос2.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
HTTPЗапрос2.Заголовки.Вставить("Cookie", JSESSIONID1);
HTTPЗапрос2.УстановитьТелоИзСтроки("name=" + name + "&col=" + kol);
HTTPЗапрос2.АдресРесурса = "/login";

Соединение1 = Новый HTTPСоединение("login.1c.ru",,,,Новый ИнтернетПрокси,,Новый ЗащищенноеСоединениеOpenSSL);
ОтветHTTP = Соединение1.ОтправитьДляОбработки(HTTPЗапрос2);
15. John_d 536 06.02.14 11:49 Сейчас в теме
12. almas 200 05.02.14 21:31 Сейчас в теме
Спасибо. Очень актуальная тема.
13. Aleksey.Bochkov 3180 05.02.14 23:36 Сейчас в теме
По поводу списка файлов обновлений - конфигуратор умеет искать нужные обновления на серверах 1С, т.е. общий список есть.
Вот он (конфигуратор к нему обращается) - http://downloads.v8.1c.ru/tmplts/v8cscdsc.lst
Раньше точно работало, сейчас пишет что файла нет. Или я не те логин-пароль использую, или ошибка у 1С из-за перестройки ресурсов.
Прикрепленные файлы:
14. barelpro 1002 06.02.14 00:24 Сейчас в теме
(13) Aleksey.Bochkov,

если найдете путь к файлу с общим списком обновлений - получите огромный респект от всего сообщества 1С :)
72. biformatus 20.02.16 21:50 Сейчас в теме
(14) Чтобы качнуть этот файл нужна в качестве UserAgent указать 1с:Предприятие.
16. artspeed 176 06.02.14 15:08 Сейчас в теме
Отлично. Действительно после обновления загрузка стала работать.
За это вам жирный "+"
По мне так: Что бы развивать программу можно сделать так:

Вместо одного логина/пасса от личного кабинет users.v8.1c.ru - сделать несколько учетных данных.
Т.е. я подписан, например на бюджет, хозрасчет, УТ под разными личными кабинетами.
Ваша программа последовательно открывает все учетки, скачивает заголовки, затем в таблице значений сворачивает по точным наименованиям. Ну как то так.
Таким образом мы получим более точный список ВСЕХ (тех, на которые есть подписка в одном/нескольких личных кабинетах) конфигураций

НУ и наверное последнее: Осталось включить возможность скачивать конфигурации, или на крайний случай получать "КОНЕЧНУЮ ПРЯМУЮ ССЫЛКУ НА ОБНОВЛЕНИЕ", а не рыскать каждый раз по сайту.
т.е. отметили галочками, какие конфигурации необходимо скачать и пошли чай пить. В программе предварительно в настройках в справочнике задаем конечные пути скачки.
По нажатию "скачать" скачиваем обновления, которые уже рассованы по нужным папкам, и спокойно едем обновляться.

Извиняюсь за извращения, люблю это дело))
17. barelpro 1002 06.02.14 19:16 Сейчас в теме
(16) artspeed,

Алексей, не вижу никаких извращений, вполне дельные требования к разработке. Надо только правильно спозиционироваться на целевой аудитории - кому такая разработка будет интересна - и вперед!
Что касается меня - я писал статью из просветительских побуждений. Если найдется смельчак доработать мою конфу - с удовольствием передам ему неисключительные права на нее (достаточно просто сослаться на меня) :)
18. artspeed 176 07.02.14 04:20 Сейчас в теме
(17) проанализировал вашу конфу и запрос HTML. 1С-ники очень хитро генерируют ссылку на скачивание. Предполагаю java скриптом... С разных сторон подходил, но так конечную ссылку не получилось выудить...
19. slavik27 11 08.02.14 15:21 Сейчас в теме
(16) artspeed, есть такой функционал http://infostart.ru/public/197576/
сейчас дорабатываем на переделанный сайт 1с, немного изменили пути
35. buganov 57 29.05.14 19:56 Сейчас в теме
(19) slavik27, за две тысячи? Есть бесплатные аналоги не хуже )
20. opx 556 09.02.14 12:21 Сейчас в теме
А может знает кто как реализовать автоматический редирект. Например при Oauth авторизации осуществляется редирект, а HTTPОтвет возвращает код 302. Было бы неплохо реализовать редирект автоматически. Как это сделать вручную я не сообразил.
21. barelpro 1002 09.02.14 12:46 Сейчас в теме
(20) opx,

В моем примере как раз редирект отрабатывается. На скриншоте посмотрите, код ответа 302, сервер возвращает в шапке ответа поле Location, в котором указан адрес редиректа
22. fuxic 293 10.02.14 12:30 Сейчас в теме
Тема отличная, только начал веб-программированием увлекаться. Спасибо
23. iov 364 10.02.14 14:55 Сейчас в теме
Спасибо. очень доходчиво.
24. DrAku1a 1302 11.02.14 10:18 Сейчас в теме
Все работает. Спасибо!
Осталось сделать загрузчик новых вышедших обновлений и информер =)
26. barelpro 1002 13.02.14 12:30 Сейчас в теме
(24) DrAku1a,
не хочу ломать бизнес тем, кто берет за информер деньги :)
27. DrAku1a 1302 13.02.14 18:40 Сейчас в теме
(26) за информер - да, а за загрузчик?
кстати, можно сделать иерархический список (как на картинке)

1. Справочник "Программы" делаем иерархическим (нужен один уровень иерархии).

2. Немного корректируем процедуру в форме обработки "ЗагрузкаПрограммИВерсий":
Процедура РекурсивныйПарсингСпискаКонфигураций(ДокументHTML)
	
	ТекИмяГруппы = "";
	ТекГруппа = Справочники.Программы.ПустаяСсылка();
	Для Каждого ЭлДок Из ДокументHTML.ДочерниеУзлы Цикл
		
		Если СокрЛП(ЭлДок.ТекстовоеСодержимое) = "Название" Тогда
			
			//количество строк в таблице дистрибутивов
			СписокУзловHTML = ЭлДок.РодительскийУзел.РодительскийУзел.РодительскийУзел.ДочерниеУзлы[1].ДочерниеУзлы;
			КолЭлементов = СписокУзловHTML.Количество();
			
			Для А=0 По КолЭлементов-1 Цикл
				
				Если СписокУзловHTML[А].ДочерниеУзлы.Количество()=1 Тогда
					ТекИмяГруппы = СокрЛП(СписокУзловHTML[А].ДочерниеУзлы[0].ДочерниеУзлы[0].ТекстовоеСодержимое);
				КонецЕсли;
				
				ТекЯчейка = СписокУзловHTML[А].ДочерниеУзлы[0].ДочерниеУзлы[0];
				Если ТипЗнч(ТекЯчейка) = Тип("ЭлементЯкорьHTML") Тогда
					
					Если ТекИмяГруппы<>"" Тогда
						Если СокрЛП(ТекГруппа.Наименование)<>ТекИмяГруппы Тогда
							Запрос = Новый Запрос;
							Запрос.УстановитьПараметр("Название", ТекИмяГруппы);
							Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
							               |	Программы.Ссылка
							               |ИЗ
							               |	Справочник.Программы КАК Программы
							               |ГДЕ
							               |	Программы.НазваниеПолное ПОДОБНО &Название
							               |	И Программы.ЭтоГруппа";
							Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
							Если Выборка.Следующий() Тогда
								ТекГруппа = Выборка.Ссылка;
							Иначе
								НовГруппа = Справочники.Программы.СоздатьГруппу();
								НовГруппа.Наименование = ТекИмяГруппы;
								НовГруппа.Записать();
								ТекГруппа = НовГруппа.Ссылка;
							КонецЕсли;
						КонецЕсли;
					КонецЕсли;
					
					Название = СокрЛП(ТекЯчейка.ТекстовоеСодержимое);
					ГиперСсылка = ТекЯчейка.ГиперСсылка;
					
					Запрос = Новый Запрос;
					Запрос.УстановитьПараметр("Название", Название);
					Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
					               |	Программы.Ссылка,
					               |	Программы.Родитель
					               |ИЗ
					               |	Справочник.Программы КАК Программы
					               |ГДЕ
					               |	Программы.НазваниеПолное ПОДОБНО &Название
					               |	И НЕ Программы.ЭтоГруппа";
					Выборка = Запрос.Выполнить().Выбрать();
					Если Выборка.Количество() = 0 Тогда
						
						НовыйСправочник = Справочники.Программы.СоздатьЭлемент();
						НовыйСправочник.Наименование = Название;
						НовыйСправочник.НазваниеПолное = Название;
						НовыйСправочник.ГиперСсылка = ГиперСсылка;
						НовыйСправочник.Родитель = ТекГруппа;
						НовыйСправочник.Записать();
						
						Загружено = Загружено + 1;
					Иначе
						
						Выборка.Выбрать();
						Пока Выборка.Следующий() Цикл
							Если Выборка.Родитель<>ТекГруппа Тогда
								НовыйСправочник = Выборка.Ссылка.ПолучитьОбъект();
								НовыйСправочник.Родитель = ТекГруппа;
								НовыйСправочник.Записать();
							КонецЕсли;
						КонецЦикла;

					КонецЕсли;
					
				КонецЕсли;
			КонецЦикла;
			Возврат;
		КонецЕсли;
			
		Если ЭлДок.ЕстьДочерниеУзлы() Тогда
			
			РекурсивныйПарсингСпискаКонфигураций(ЭлДок);
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры
Показать


3. В самой форме перенастроить список - режим вывода: дерево, разворачивать все уровни.
Прикрепленные файлы:
25. soap 54 13.02.14 12:22 Сейчас в теме
Спасибо ОЧЕНЬ информативно. Будем использовать!
28. DrAku1a 1302 13.02.14 18:58 Сейчас в теме
(0) Да, и ещё вопрос автору: Чем пользовались для составления процедур парсинга?
Т.е. вижу по коду, что с помощью ЧтениеHTML и ПостроительDOM создавали объектную модель HTML-документа и дальше с ней работали...
Вопрос в том - с помощью какого вьювера просматривали DOM?
29. barelpro 1002 13.02.14 22:34 Сейчас в теме
(28) DrAku1a, хороший вопрос!

был бы вьюер, сэкономил бы 15 минут жизни :)
А так все по наитию
30. seermak 659 05.03.14 08:22 Сейчас в теме
31. x_under 13 26.03.14 17:04 Сейчас в теме
Супер! Встраиваем в свою конфигурацию для ИТСников.
32. laeg 13 18.04.14 20:53 Сейчас в теме
Огромное спасибо за вашу работу. Взял за основу вашу разработку, переделал конечно структуру, версии перенес в РС, переделал справочник Программ, сделал функцию обновления, подцепил к регламенту - в итоге свои идеи воплотил в вашу разработку :)

Прикрепленные файлы:
33. lnnd 13 08.05.14 13:50 Сейчас в теме
Можно еще больше оптимизировать, в место рекурсии обработать ДокументHTML одним циклом c получением всех данных
В цикле заполняется: Название, гиперссылка, номер версии, дата выхода, планируемый номер версии, планируемая дата выхода, планируемая дата обновления данных, ознакомительный номер версии, дата выхода ознакомительной версии

В место процедуры РекурсивныйПарсингСпискаКонфигураций(ДокументHTML)

Процедура ЗаполнитьДанные(ДокументHTML, ТаблицаДанных)
	
	ТекГруппа = "";
	
	ЭлементыDOM = ДокументHTML.ПолучитьЭлементыПоИмени("td");
		
	Для Каждого Элемент Из ЭлементыDOM Цикл
				
		Если Элемент.ИмяКласса = "groupColumn" Тогда
						
			ИндексКолонки = 1;
			ТекГруппа = СокрЛП(Элемент.ТекстовоеСодержимое);
			
			Продолжить;
			
		КонецЕсли;
		
		Если Элемент.ИмяКласса = "nameColumn" Тогда
			
			НоваяСтрока = ТаблицаДанных.Добавить();
			
			НоваяСтрока.Группа = ТекГруппа;
			НоваяСтрока.Название = СокрЛП(Элемент.ТекстовоеСодержимое);
			
			Если ТипЗнч(Элемент.ДочерниеУзлы[0]) = Тип("ЭлементЯкорьHTML") Тогда
			    НоваяСтрока.Гиперcсылка = СокрЛП(Элемент.ДочерниеУзлы[0].Гиперссылка);
			КонецЕсли;	
										
			ИндексКолонки = 3;
			
			Продолжить;
			
		КонецЕсли;	
		
		ИндексКолонки = ИндексКолонки + 1;
		НоваяСтрока[ТаблицаДанных.Колонки[ИндексКолонки].Имя] = СокрЛП(Элемент.ТекстовоеСодержимое);
		
	КонецЦикла;	
		
КонецПроцедуры
Показать
34. x_under 13 19.05.14 09:27 Сейчас в теме
Добрый день.
Внедрили вашу систему в рабочую базу, все отлично. Потом решили перевести в регламентное задание и тут начались сложности: база в клиент серверном варианте. Регламентное задание запускается. Система получает JSESSIONID, но при получении страницы со списком конфигурации система ничего уже не возвращает. Подскажите куда смотреть
36. ssokolov1 10.06.14 13:13 Сейчас в теме
Не работает.
Не грузит список программ.
До какого то момента работало, потом перестало. Выдавало ошибку, после скачал исправленную.
Ошибка исчезла, но программы не грузит
37. barelpro 1002 01.09.14 18:08 Сейчас в теме
(36) Спасибо за замечание!
Выпущена версия 2. 1С слегка изменила алгоритм авторизации, пришлось слегка переписать код, попутно удалось уменьшить количество запросов с 8 до 4.
maXon777; laeg; +2 Ответить
38. Патриот 231 05.09.14 21:42 Сейчас в теме
(0) +
Статья супер, хороший толчок для новичка, чтобы освоить новую для себя технологию 1С. Вы когда писали конфу, то пользовались только платформой 1С и инструментами разработчика браузера, чтобы распутать эту хитрую регистрацию на сайте 1С?
40. barelpro 1002 05.09.14 23:27 Сейчас в теме
(38) Спасибо за оценку! Я пользовался советами своего брата, работающего в Яндексе, поэтому использовал инструменты Яндекс-браузера. А вообще, как мне подсказали здесь, есть инструменты не хуже, например, Firebug для Firefox.
39. Патриот 231 05.09.14 21:44 Сейчас в теме
(0), Сам вашу конфу не использовал, т.к. не зареган на сайте 1С, но использовал её, как пример
41. deevil 130 06.09.14 03:46 Сейчас в теме
Статья зачетная для изучения механизмов 1с для веб
42. RustamTurn 09.09.14 23:54 Сейчас в теме
Спасибо за статью. У меня возник вопрос, а как выполнить метод PATCH в объекте Httpсоединение, есть методы PUT,POST,DELETE,GET, а метод PATCH я не обнаружил и не смог воспроизвести его, хоть 1с пишет что к REST можно обращаться с помощью метода PATCH.
43. barelpro 1002 11.09.14 16:27 Сейчас в теме
(42) Да, так и есть, метод PATCH не наблюдается. А зачем он вам?
44. RustamTurn 11.09.14 22:18 Сейчас в теме
(43) ОН используется для замены только указанных свойств, при этом остальные свойства остаются не тронутыми, его можно заменить методом PUT , но он очищает все незаполненные поля.
Плюс еще в объекте HTTPсервисы, появилась куча методов,которыми из 1с никак не обратиться.

● GET;

● POST;

● PUT;

● DELETE;

● PATCH;

● MERGE;

● CONNECT;

● OPTIONS;

● TRACE;

● PROPFIND;

● PROPPATCH;

● MKCOL;

● COPY;

● MOVE;

● LOCK;

● UNLOCK.
47. stegantsov 07.11.14 10:27 Сейчас в теме
(43)
Расскажите поподробнее как изменился порядок авторизации в новых релизах
scandal2; +1 Ответить
45. husky 6 23.10.14 23:12 Сейчас в теме
А как для обычных форм переделать пожалуйста, нужно под УПП 1.3. Заранее спасибо.
46. husky 6 29.10.14 00:02 Сейчас в теме
Как определить какие строки для запроса на сервер включать в заголовки, а какие нет, а также как определить возможно какие-то еще параметры нужно задать?
48. Insanity 69 26.01.15 11:32 Сейчас в теме
Спасибо за статью. Обработка работает. Но не это главное, мне очень пригодился сам метод работы с сайтами, требующими аутентификации. Я оказывается всё делал не совсем правильно. Сэкономили мне массу времени. Ещё раз спасибо.
49. xsazar 3 08.08.15 18:55 Сейчас в теме
Как теперь получить страницу, после обновления сайта???
50. xsazar 3 09.08.15 00:11 Сейчас в теме
Разобрался! Теперь так!

&НаСервере
Функция НайтиJSESSIONID()
	
	Попытка
		
		//для GET-запросов
		HTTPЗапрос1 = Новый HTTPЗапрос;
		HTTPЗапрос1.Заголовки.Вставить("Connection", "keep-alive");
		
		//для POST-запросов
		HTTPЗапрос2 = Новый HTTPЗапрос;
		HTTPЗапрос2.Заголовки.Вставить("Connection", "keep-alive");
		HTTPЗапрос2.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
		
		Соединение1 = Новый HTTPСоединение("login.1c.ru",,,,Новый ИнтернетПрокси,,Новый ЗащищенноеСоединениеOpenSSL);
		//Соединение2 = Новый HTTPСоединение("users.v8.1c.ru",,,,Новый ИнтернетПрокси,,Новый ЗащищенноеСоединениеOpenSSL);
		  //portal.1c.ru
		Соединение2 = Новый HTTPСоединение("releases.1c.ru",,,,Новый ИнтернетПрокси,,Новый ЗащищенноеСоединениеOpenSSL);
		
		//Запрос 1
		HTTPЗапрос1.АдресРесурса = "/releases.1c.ru/total";
		ОтветHTTP1 = Соединение2.Получить(HTTPЗапрос1);
		результат = ОтветHTTP1.КодСостояния;
		JSESSIONID = ОтветHTTP1.Заголовки.Получить("Set-Cookie");
		JSESSIONID = Лев(JSESSIONID, Найти(JSESSIONID, ";") - 1);
		Объект.JSESSIONID = JSESSIONID;
		LOCATION1 = СтрЗаменить(ОтветHTTP1.Заголовки.Получить("Location"), "https://login.1c.ru", "");
		
		//Запрос 2
		HTTPЗапрос1.АдресРесурса = LOCATION1;
		ОтветHTTP2 = Соединение1.Получить(HTTPЗапрос1);
		JSESSIONID1 = ОтветHTTP2.Заголовки.Получить("Set-Cookie");
		JSESSIONID1 = Лев(JSESSIONID1, Найти(JSESSIONID1, ";") - 1);
		inviteCode = РаспарситьinviteCode(ОтветHTTP2.ПолучитьТелоКакСтроку());
		
		//Запрос 3
		HTTPЗапрос2.АдресРесурса = "/login;" 
		+ СтрЗаменить(JSESSIONID1, "JSESSIONID=", "jsessionid=") 
		+ "?service=https%3A%2F%2Fusers.v8.1c.ru%2Fdistribution%2Fpublic%2Fsecurity_check%3Bjsessionid%3D"­ 
		+ СтрЗаменить(JSESSIONID, "JSESSIONID=", "");
		HTTPЗапрос2.Заголовки.Вставить("Cookie", JSESSIONID1);
		HTTPЗапрос2.УстановитьТелоИзСтроки(inviteCode);
		ОтветHTTP3 = Соединение1.ОтправитьДляОбработки(HTTPЗапрос2);
		LOCATION3 = СтрЗаменить(ОтветHTTP3.Заголовки.Получить("Location"), "https://releases.1c.ru", "");
		
		//Запрос 4
		HTTPЗапрос1.АдресРесурса = LOCATION3;
		HTTPЗапрос1.Заголовки.Вставить("Cookie", JSESSIONID);
		ОтветHTTP4 = Соединение2.Получить(HTTPЗапрос1);
		
		
	Исключение    
		Возврат Ложь;
	КонецПопытки;	
		
	Возврат Истина;
	
КонецФункции

&НаСервере
Функция ЗагрузитьПрограммыНаСервере()
	
	Попытка
		
		Загружено = 0;
		Запрос = Новый HTTPЗапрос;
		Запрос.Заголовки.Вставить("Connection", "keep-alive");
		Запрос.Заголовки.Вставить("Cookie", JSESSIONID);
		Запрос.АдресРесурса = "/total";
		Соединение2 = Новый HTTPСоединение("releases.1c.ru",,,,Новый ИнтернетПрокси,,Новый ЗащищенноеСоединениеOpenSSL);
		ОтветHTTP = Соединение2.Получить(Запрос);
		
		ЧтениеHTML = Новый ЧтениеHTML;
		ЧтениеHTML.УстановитьСтроку(ОтветHTTP.ПолучитьТелоКакСтроку());
		
		Построитель = Новый ПостроительDOM;
		ДокументHTML = Построитель.Прочитать(ЧтениеHTML);
		
		РекурсивныйПарсингСпискаКонфигураций(ДокументHTML);
		
	Исключение
		
		Возврат Ложь;
		
	КонецПопытки;
	
	Возврат Истина;
	
КонецФункции
Показать
51. markovki 19 17.08.15 16:02 Сейчас в теме
(50) xsazar, объясните чайнику пожалуйста, как подобным методом программно авторизоваться на login.1c.ru, затем с той же авторизацией попасть на страницу https://releases.1c.ru/total
Далее таким же методом хочу добраться до страницы (там 4 перехода):
https://releases.1c.ru/version_file?nick=Accounting30&ver=3.0.34.10&path=Accounting\3_0_34_10\updsetup.exe
К сожалению, не могу понять, тема для меня новая, а ваш пример не работает, возможно, что-то не так сделал, после нажатия немного думает и ничего не происходит.
52. xsazar 3 19.08.15 00:05 Сейчас в теме
(51) markovki, по вашим словам, можно понять, что вы ни чего не меняли в процедуре, где идет парсинг страницы релиза, а она обновилась, там то же нужно менять, поэтому и ни чего не происходит, у меня пока только есть регламентное задание, могу показать как идет парсинг страницы, но он для обработки не подойдет.
53. markovki 19 21.08.15 08:21 Сейчас в теме
(52) xsazar, вы правы, не менял.
Просто пытаюсь более детально разобраться как происходит переход на releases.1c.ru после авторизации.
Мне казалось, что для этого необходимы только логин/пароль и кукисы c login.1c.ru.
Зачем например, парсить страницу и собственно сама переменная inviteCode...
54. NcSteel 21.08.15 13:55 Сейчас в теме
1С изменила сайт и естественно данная конфигурация перестала работать. Будет ли доработана ?
55. barelpro 1002 27.08.15 22:04 Сейчас в теме
Внимание! Выпущена версия 3. Учтен новый дизайн сайта 1С.
56. hibico 256 01.09.15 11:17 Сейчас в теме
Здорово!
Прошу разрешение на использование Вашего кода для авторизации в моей разработке для скачивания файлов обновлений "updsetup.exe". Ссылки в коде и публикации гарантирую.
59. barelpro 1002 02.09.15 22:43 Сейчас в теме
(56) Не возражаю. Но если 1С так часто будет менять сайт и авторизацию, то это нифига не enterprise solution! Замучаетесь выпускать заплатки... Я уже замучался...
57. Avrobus 02.09.15 14:34 Сейчас в теме
На 1С слегка изменилась авторизация. Помогли такие костыли:
В функции НайтиJSESSIONID()
1. Запрос 2
Перед JSESSIONID1 = Лев(JSESSIONID1, Найти(JSESSIONID1, ";") - 1); вставить
JSESSIONID1 = Прав(JSESSIONID1, СтрДлина(JSESSIONID1) - Найти(JSESSIONID1, "SESSION") + 1);

2. Запрос 3
HTTPЗапрос2.АдресРесурса заменить на
HTTPЗапрос2.АдресРесурса = "/login?service=https%3A%2F%2Freleases.1c.ru";
barelpro; hibico; +2 Ответить
58. barelpro 1002 02.09.15 22:40 Сейчас в теме
(57) Да, что-то они зачастили... Сейчас поправлю и выложу v4
60. mcfearson 07.09.15 23:57 Сейчас в теме
Подскажите, пожалуйста. У нас здесь есть домены releases.1c.ru и login.1c.ru. Мы авторизуемся на login.1c.ru, шлем туда имя пользователя и пароль, а затем получаем страницу с releases.1c.ru. Куки разные. Как нас идентифицируют как одного и того же пользователя и дают доступ к releases.1c.ru?
61. barelpro 1002 08.09.15 18:17 Сейчас в теме
(60)
Смотрим функцию НайтиJSESSIONID()
В первом запросе к releases.1c.ru нам присваивается JSESSIONID
Во втором запросе к login.1c.ru нам присваиваются параметры inviteCode
В третьем запросе мы отправляем inviteCode с логином-паролем и получаем ticket
В четвертом запросе мы связываем JSESSIONID и ticket
63. mcfearson 09.09.15 15:55 Сейчас в теме
62. barelpro 1002 08.09.15 18:38 Сейчас в теме
Внимание! Выпущена версия 5. Оптимизирован код. Заменены методы рекурсивных парсингов на конструкции ПолучитьЭлементПоИдентификатору и ПолучитьЭлементыПоИмени. Старые функции остались закоментированными.
Спасибо коллеге Avrobus за идею! :)
64. azazana 6 21.09.15 18:30 Сейчас в теме
А подскажите, каким образом можно посмотреть какой именно post запрос формируется при когда на сайте вводишь логин и пароль?
65. azazana 6 22.09.15 10:31 Сейчас в теме
Если смотреть в Хроме, то там формируется куча различных запросов. Как отобрать нужный?
67. pihy 45 03.10.15 13:32 Сейчас в теме
(65) azazana, я искал по статусу "302". POST запрос. Внизу раздел "Form data" переключить на "View source". Эту строку и добавляю в тело запроса.
66. pihy 45 03.10.15 13:06 Сейчас в теме
Знающие люди, подскажите, пожалуйста.

Пытаюсь авторизироваться на сайте средствами 1с:

Соединение = Новый HTTPСоединение("toysland.crimea.ua");			
Заголовки = Новый Соответствие;
Заголовки.Вставить("host", "toysland.crimea.ua");
Заголовки.Вставить("Connection", "keep-alive");
Заголовки.Вставить("Accept","text/html");
Заголовки.Вставить("Accept-Language", "ru");
	
Заголовки.Вставить("Content-Length",СтрДлина(СтрЗаменить(СтрЗаменить(action=secure-login&login="$ЛОГИН$"&passwd="$ПАРОЛЬ$","$ЛОГИН$",Объект.Пользователь),"$ПАРОЛЬ$",Объект.Пароль)));
Запрос = Новый HTTPЗапрос(ТекАдрес, Заголовки);
Запрос.УстановитьТелоИзСтроки(СтрЗаменить(СтрЗаменить(Объект.ШаблонПОСТ,"$ЛОГИН$",Объект.Пользователь),"$ПАРОЛЬ$",Объект.Пароль));
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Показать


Строку action=secure-login&login="$ЛОГИН$"&passwd="$ПАРОЛЬ$" подсмотрел снифером во время отправки данных на сервер браузером.
В
Ответ.ПолучитьТелоКакСтроку();

попадает заблокированная страница. Т.е. авторизацию не проходит...
68. Arxxximed 8 30.10.15 14:43 Сейчас в теме
Подскажите, пожалуйста , как все таки получать текст страницы полученной в сжатом виде gzip. Устанавливаю Заголовок "Accept-Encoding : gzip"
По итогу HTTPОтвет.ПолучитьТелоКакСтроку() Возвращает сжатые данные

Поднял вопрос в теме http://forum.infostart.ru/forum26/topic140086/
69. tormozit 5426 23.01.16 21:20 Сейчас в теме
У меня ОтветHTTP3.КодСостояния = 200, а нужен 302. Почему такое может быть?
Ответ: в моем случае был неверный логин или пароль
70. Denois1333 17.02.16 08:11 Сейчас в теме
Здравствуйте, подскажите пожалуйста, не получается авторизоваться на сайте интернет банка. Там то тоже используется HTTPS, но если при авторизации на users.v8.1c.ru в теле POST запроса отправляются незашифрованные логин/пароль, то в интернет банк отправляется шифрованный пароль, причем всегда разный. Как сформировать POST запрос на авторизацию?
71. Denois1333 19.02.16 11:15 Сейчас в теме
Разобрался со своей проблемой, там действительно при каждой авторизации происходит шифрование пароля. Я разобрал алгоритм шифрования и на авторизацию отправляю шифрованный пароль. HTTPS соединение и сертификаты здесь не причем. Кодирование идет встроенными процедурами сайта.
74. info@itshkola.com 21.03.16 21:39 Сейчас в теме
Валерий, здравствуйте!
Можно Вас попросить эту обработку скинуть на business.kavun@gmail.com
Уж очень нужна, а нет возможности скачать.
Спасибо большое за статью - очень грамотно написана
75. biformatus 25.10.16 18:45 Сейчас в теме
Сломалось что-то.
Функция РаспарситьinviteCode(Текст)
	
	ЧтениеHTML = Новый ЧтениеHTML;
	ЧтениеHTML.УстановитьСтроку(Текст);
	
	Построитель = Новый ПостроительDOM;
	ДокументHTML = Построитель.Прочитать(ЧтениеHTML);
	
	loginForm = ДокументHTML.ПолучитьЭлементПоИдентификатору("loginForm");
	
	inviteCode = "inviteCode=<=" + loginForm.Элементы[1].Значение 
				+ "&execution=" + loginForm.Элементы[2].Значение 
				+ "&_eventId=" + loginForm.Элементы[3].Значение
	 			+ "&username=" + КонстантыНабор.username 
				+ "&password=" + КонстантыНабор.password;
				
	//РекурсивныйПарсингСтраницыЛогина(ДокументHTML, inviteCode);
	//inviteCode = inviteCode + "&username=" + КонстантыНабор.username + "&password=" + КонстантыНабор.password;
	
	Возврат inviteCode;
	
КонецФункции
Показать


Здесь ошибка - не получает элемент по идентификатору loginForm. Логин и пароль рабочие.
77. barelpro 1002 24.05.17 22:32 Сейчас в теме
(75) Проверил только что, был удивлен, что до сих пор работает! )))
76. Yashazz 2376 24.05.17 16:27 Сейчас в теме
Как разработка - возможно, неплохо. Как статья - хуже некуда. Собственно, статьи нет, есть пара цитат из СП и нихрена не понятно, как этим пользоваться. Разочарован.
baracuda; +1 Ответить
78. barelpro 1002 24.05.17 22:34 Сейчас в теме
(76) Если что-то не понятно, это еще не повод разочаровываться! ;)
79. baracuda 3 21.08.17 15:00 Сейчас в теме
1С наверное никогда не додумается дать доступ к обновлениям через человеческий API, потому и возникают такие костыли как данная разработка.
murat_; u_n_k_n_o_w_n; Nicholas; Sergafan10; VitaliyCeban; markovki; barelpro; +7 Ответить
80. Nicholas 725 13.11.17 15:49 Сейчас в теме
На третьем шаге, при выполнении ОтправитьДляОбработки() стало возвращать код 500. Что это может означать?
83. DimaShapovaloff 22.03.19 18:48 Сейчас в теме
(80) Исправьте ошибочку в РаспарситьinviteCode(). &execution индекс 4, а не 3
81. realchel 23.10.18 12:14 Сейчас в теме
Код закрытый или открытый?
Мы тогда купили.
82. DimaShapovaloff 22.03.19 18:25 Сейчас в теме
Исправьте ошибочку в парсилке. &execution индекс 4, а не 3

&НаСервере
Функция РаспарситьinviteCode(Текст)
	
	ЧтениеHTML = Новый ЧтениеHTML;
	ЧтениеHTML.УстановитьСтроку(Текст);
	
	Построитель = Новый ПостроительDOM;
	ДокументHTML = Построитель.Прочитать(ЧтениеHTML);
	
	loginForm = ДокументHTML.ПолучитьЭлементПоИдентификатору("loginForm");
	
	inviteCode = "inviteCode=&username=" + КонстантыНабор.username 
				+ "&password=" + КонстантыНабор.password
				+ "&execution=" + loginForm.Элементы[4].Значение
				+ "&_eventId=submit"
				+ "&geolocation="
				+ "&submit=Войти"
				+ "&rememberMe=on"
				;
				
	//РекурсивныйПарсингСтраницыЛогина(ДокументHTML, inviteCode);
	//inviteCode = inviteCode + "&username=" + КонстантыНабор.username + "&password=" + КонстантыНабор.password;
	
	Возврат inviteCode;
	
КонецФункции
Показать
84. barelpro 1002 22.03.19 19:49 Сейчас в теме
(82) Что-то поменялось на сайте 1С?
85. barelpro 1002 22.03.19 20:00 Сейчас в теме
(84) Да действительно поменялось, поправил, спасибо!
86. DimaShapovaloff 23.03.19 01:03 Сейчас в теме
(85) Не за что. Спасибо за публикацию
89. Gamm 13 17.06.19 14:46 Сейчас в теме
(85)
Опять поменялось) Теперь &execution индекс 6
(84)
88. alf2006x 25 07.05.19 11:29 Сейчас в теме
Статья отличная!
Особенно порадовало то, что пример загрузки в базе был рабочий. ИТС легко открылся.
Очень долго не мог понять как работает вся эта пост- и гет- шняга в 1С83.
Посмотрел пример ИТС и нарисовал подобное для своей задачи.
Теперь спокойно захожу и скачиваю всё что необходимо на нужный мне сайт (https).
Гораздо быстрее и надежнее, чем собирался сделать при помощи InternetExplorer.Application.
По тому пути я дошел почти до конца, упёрся в сохранение файла, понял что окошко в IE11, предлагающее "Вы
хотите сохранить..." красивыми методами непобедимо, плюнул и пошёл разбираться с интернет запросами.
Попалась эта статья, один вечер и готово.
Единственное, маловато написано про то, как в яндекс.браузере правильно читать заголовки: откуда что брать
и куда что ложить в новом запросе. Думаю для тех кто впервые сталкивается с задачей подобного рода это лишним не было бы.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Бизнес-аналитик 1С
Москва
зарплата от 90 000 руб. до 150 000 руб.
Полный день

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

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

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

Работа от Инфостарт
Санкт-Петербург
По совместительству