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


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

На написание этой статьи сподвигли два фактора:

1. Весной 2013 в версии платформы 8.2.18 появились новые возможности языка:

Реализована возможность работы с заголовками HTTP-запросов, обработки кодов возврата, получения и установки тела запроса в виде строки или двоичных данных. Реализованы объекты HTTPЗапрос, HTTPОтвет.
В объекте HTTPСоединение реализованы следующие изменения:
Методы Записать(), ОтправитьДляОбработки(), Получить(), Удалить() возвращают значение типа HTTPОтвет;
Для методов Записать(), ОтправитьДляОбработки(), Получить(), Удалить() реализован синтаксис, позволяющий использовать программно сформированный HTTP-запрос.

2. В декабре 2013 из 1С-зазеркалья вышли две новости:

Автоматический REST интерфейс прикладных решений http://v8.1c.ru/o7/201312rest/index.htm и HTTP-сервисы в прикладном решении http://v8.1c.ru/o7/201312http/index.htm

Т.е. скоро мы получим инструмент с возможностями COM-соединения и WEB-сервисов одновременно. Задачи интеграции станут интереснее, появятся новые возможности, а это не может не радовать true-программиста! Поскольку для  работы со сторонними REST сервисами можно использовать имеющиеся в платформе средства работы с HTTP: объекты HTTPСоединение, HTTPЗапрос и HTTPОтвет, предлагаю рассмотреть эти методы чуть подробней, а в конце решить прикладную задачку: программно авторизоваться на страничке https://users.v8.1c.ru/distribution/total, распарсить ее и заполнить справочники Программы и Версии. Результат прикреплен к этой статье в виде конфигурации. Запускать ее можно на платформе не ниже 8.2.18.

Что такое HTTP — запросы? Мы с ними сталкиваемся каждый день.

Для начала предлагаю открыть Инструменты разработчика в браузере Yandex — кнопками Ctrl-Shift-I и перейти на закладку Network — именно здесь можно увидеть содержимое HTTP-запросов

Например, когда в браузере вводим адрес сайта https://login.1c.ru/login, на сервер уходит HTTP-запрос типа GET:

Request URL: https://login.1c.ru/login
Request Method: GET

Request Headers:
Host: login.1c.ru
Connection: keep-alive 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.12785 YaBrowser/13.12.1599.12785 Safari/537.36 
Accept-Encoding: gzip,deflate,sdch Accept-Language: ru,en;q=0.8

В 1С у HTTP-запроса типа GET есть вполне конкретный аналог: метод объекта HTTPСоединение.Получить(<HTTPЗапрос>)
А у объекта HTTPЗапрос есть свойства:
АдресРесурса типа Строка (он же 
Request URL)
и Заголовки типа Соответствие (он же 
Request Headers)

В ответ на этот запрос сервер возвращает браузеру HTTP-ответ:

Status Code: 200
Responce Headers:
Server: nginx

Date: Tue, 04 Feb 2014 07:36:25 GMT
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: no-cache
Cache-Control: no-store
Set-Cookie: JSESSIONID=AAEB3E82351662F43E37CE3F64B7795E.login1c8010; Path=/; Secure; HttpOnly
Content-Language: ru
Content-Encoding: gzip

И тело ответа, в котором содержится код запрошенной страницы на HTML (см закладку Response в Инструментах разработчика Yandex браузера)

В 1С метод HTTPСоединение.Получить(<HTTPЗапрос>) возвращает объект типа HTTPОтвет, у которого соответственно есть свойства:
КодСостяния (он же Status Code)
Заголовки (он же Responce Headers)
и метод ПолучитьТелоКакСтроку() (он же тело ответа — Response)

Когда на страничке https://login.1c.ru/login вводим логин/пароль и нажимаем кнопку Войти, то на сервер уходит HTTP-запрос типа POST:

Request URL: https://login.1c.ru/login;jsessionid=AAEB3E82351662F43E37CE3F64B7795E.login1c8010
Request Method: POST
Request Headers:
POST /login;jsessionid=AAEB3E82351662F43E37CE3F64B7795E.login1c8010 HTTP/1.1

Host: login.1c.ru
Connection: keep-alive
Content-Length: 122
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: https://login.1c.ru
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.12785 YaBrowser/13.12.1599.12785 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: https://login.1c.ru/login
Accept-Encoding: gzip,deflate,sdch
Accept-Language: ru,en;q=0.8
Cookie: JSESSIONID=AAEB3E82351662F43E37CE3F64B7795E.login1c8010
Form Data или Request Body или Тело запроса:
inviteCode=&lt=LT-43557-KdRxeZdJGp2n25STSoj6meIPL09eYv&execution=e1s1&_eventId=submit&username=Barelpro&password=123

В 1С у HTTP-запроса типа POST есть вполне конкретный аналог: метод объекта HTTPСоединение.ОтправитьДляОбработки(<HTTPЗапрос>)
А у объекта HTTPЗапрос, кроме свойств АдресРесурса и Заголовки можно задать тело запроса (Request Body) с помощью метода УстановитьТелоИзСтроки()

 
Во всех этих нагромождениях полей заголовков нас интересуют только некоторые поля в контексте нашей задачки. 
 
Что происходит при первом входе на страничку https://login.1c.ru/login: 
сервер открывает Java-сессию и присваивает ей идентификатор JSESSIONID, значение которого передает через поле Set-Cookie в заголовке ответа. 
 
Что происходит при заполнении полей Логин и Пароль и нажатии на кнопку Войти:
Браузер передает серверу идентификатор сессии JSESSIONID через параметр Cookie, а логин и пароль через параметр inviteCode
 
Если авторизация сессии прошла удачно, то во всех следующих запросах достаточно использовать только идентификатор JSESSIONID. А если таймаут между запросами будет больше установленного на сервере, то время сессии истечет и придется повторять авторизацию заново.
 
Конечно при практической реализации нашей задачки пришлось встретиться с небольшими сложностями, которые в итоге удалось преодолеть:
 
Так, чтобы пройти от страницы авторизации  https://login.1c.ru/login до целевой страницы https://users.v8.1c.ru/distribution/total пришлось выполнить целых 8 HTTP-запросов (см процедуру НайтиJSESSIONID()). Но эту задачу сильно упростила еще одна особенность: в заголовке ответа сервер присылает поле Location, в котором содержится адрес следующего необходимого запроса, своего рода редирект на следующую страницу, в некоторых случаях с дополнительными параметрами, например:
 
В итоге надо выполнять запросы по адресу, указанному в Location до тех пор, пока не придет ответ без Location. В данном случае такова особенность реализации защиты сайта 1С: пройти 8 запросов и в трех местах создать три различные Java-Сессии.
 
Еще одна особенность: в теле HTML-кода на страничке https://login.1c.ru/login заключены скрытые параметры, которые надо распарсить и включить в тело POST-запроса при передаче логина/пароля в inviteCode=&lt=LT-43557-KdRxeZdJGp2n25STSoj6meIPL09eYv&execution=e1s1&_eventId=submit&username=Barelpro&password=123 (см процедуры РаспарситьinviteCode() и РекурсивныйПарсингСтраницыЛогина())

Дальнейший парсинг странички https://users.v8.1c.ru/distribution/total я делал через объект ПостроительDOM в рекурсивной процедуре РекурсивныйПарсингСпискаКонфигураций(), а парсинг страниц с версиями делал в рекурсивной процедуре РекурсивныйПарсингСпискаВерсий().

Для запуска обработки ЗагрузкаПрограммИВерсий используйте кнопку "Загрузить" в командной панели справочника Программы. В обработке заполните поля логин/пароль для доступа к сайту 1С и нажмите по очереди кнопки "Загрузить программы" и "Загрузить версии".

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

 
DISCLAIMER:
 
1. Не пытайтесь для доступа к сайту 1С использовать логин Barelpro и пароль 123. Я его привел для примера. У вас должен быть свой доступ:
— или у вас есть официальный 1С-продукт и доступ к обновлениям 1С через регистрационный номер и пароль
— или вы сотрудник компании-партнера 1С, у вас есть хотя бы один сертификат типа Спец и вам руководство открыло доступ почти ко всем к обновлениям (кроме некоторых специфических, типа "Корпоративный инструментальный пакет 8")
 
2. Конечно, существует механизм получения обновлений, встроенный во все современные типовые конфигурации 1С. Например, для "1С:Конвертация данных" скачиваем архив http://downloads.1c.ru/ipp/ITSREPV/V8Update/Configs/Conversion/21/82/v8upd11.zip, в нем лежит файлик v8cscdsc.xml, в котором указаны названия и пути скачивания всех обновлений данного продукта. Но, во-первых, не для всех программ выложены такие файлики. А во-вторых, надо еще где-то узнать адреса к v8upd11.zip для всех 466 конфигураций!
 
3. Зачем это может быть нужно? Ну, например, в моей компании есть служба Регулярного сопровождения (в просторечье ИТС). Сервис-инженеры при установке обновлений типовых конфигураций у клиентов должны в обязательном порядке указывать в своей учетной базе релиз конфигурации до и после обновления. Для этого можно использовать справочник Версии из моей конфигурации. А обновлять этот справочник можно ежедневно через регламентные задачи, исключив таким образом человеческий фактор.

PS от 01.09.2014. Выпущена версия 2. 1С слегка изменила алгоритм авторизации, пришлось слегка переписать код, попутно удалось уменьшить количество запросов с 8 до 4.

PS от 27.08.2026. Выпущена версия 3. 1С изменила дизайн и адреса.

PS от 02.09.2026. Выпущена версия 4. 1С изменила авторизацию.

PS от 08.09.2026. Выпущена версия 5. Оптимизирован код. Заменены методы рекурсивных парсингов на конструкции ПолучитьЭлементПоИдентификатору и ПолучитьЭлементыПоИмени. Старые функции остались закоментированными.

PS от 12.02.2026. Выпущена версия 6. 1С изменила авторизацию.

89 Comments

  1. artspeed

    Скачал, развернул конфу, открыл, ввел логин и пароль. Загрузка версий — кнопочка просто не работает. Загрузка — программ — долго думает и заканчивает свое действие без результата((

    В общем не работоспособная конфа((

    Очень жаль

    Испытывал на 8.2.19.80

    Reply ↓
  2. barelpro

    (1) artspeed,

    Что-то с вашим логином и паролем не так. В браузере со страницы login.1c.ru куда он приводит? Отладчиком на какой строке зависает? Дайте больше информации!

    Reply ↓
  3. arteast

    Не работает.

    В режиме Предприятия вообще никаких действий не производит.

    Пробовал на платформе 1С:Предприятие 8.3 (8.3.4.389).

    В отладке:

    Соединение проходит удачно, авторизация тоже…а вот дальше

    http://joxi.ru/xNHxUv3JTJBmeSOOWH4

    Reply ↓
  4. StaticUnsafe

    Спасибо

    Reply ↓
  5. barelpro

    (3) arteast,

    мне чтобы понять, что не так, нужен ваш логин-пароль. Пришлите в личку, потом поменяете.

    Reply ↓
  6. barelpro

    (1) artspeed, (3) arteast,

    Проблема решена, выложено обновление от 05.02.2014 11:54

    Повторная закачка не списывает стартмани 🙂

    Reply ↓
  7. pahich

    Спасибо, забрал в личную коллекцию )

    Reply ↓
  8. barelpro

    Люди, скачали уже 23 человека, скажите хоть работает? успокойте меня! )))))

    Reply ↓
  9. John_d

    Спасибо за статью. Все работает.

    Круто можно методом пост отправлять данные из 1с на сайт без посредников)

    Reply ↓
  10. John_d

    Можете подсказать как правильно указать параметры post? чтобы они в глобальный массив post пришли на сайте

    так:

    HTTPЗапрос1.Заголовки.Вставить(«name=» + name + «&col=» + kol);

    Reply ↓
  11. barelpro

    (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);

    Reply ↓
  12. almas

    Спасибо. Очень актуальная тема.

    Reply ↓
  13. Aleksey.Bochkov

    По поводу списка файлов обновлений — конфигуратор умеет искать нужные обновления на серверах 1С, т.е. общий список есть.

    Вот он (конфигуратор к нему обращается) — http://downloads.v8.1c.ru/tmplts/v8cscdsc.lst

    Раньше точно работало, сейчас пишет что файла нет. Или я не те логин-пароль использую, или ошибка у 1С из-за перестройки ресурсов.

    Reply ↓
  14. barelpro

    (13) Aleksey.Bochkov,

    если найдете путь к файлу с общим списком обновлений — получите огромный респект от всего сообщества 1С 🙂

    Reply ↓
  15. John_d

    (11) Спасибо!

    Reply ↓
  16. artspeed

    Отлично. Действительно после обновления загрузка стала работать.

    За это вам жирный «+»

    По мне так: Что бы развивать программу можно сделать так:

    Вместо одного логина/пасса от личного кабинет users.v8.1c.ru — сделать несколько учетных данных.

    Т.е. я подписан, например на бюджет, хозрасчет, УТ под разными личными кабинетами.

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

    Таким образом мы получим более точный список ВСЕХ (тех, на которые есть подписка в одном/нескольких личных кабинетах) конфигураций

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

    т.е. отметили галочками, какие конфигурации необходимо скачать и пошли чай пить. В программе предварительно в настройках в справочнике задаем конечные пути скачки.

    По нажатию «скачать» скачиваем обновления, которые уже рассованы по нужным папкам, и спокойно едем обновляться.

    Извиняюсь за извращения, люблю это дело))

    Reply ↓
  17. barelpro

    (16) artspeed,

    Алексей, не вижу никаких извращений, вполне дельные требования к разработке. Надо только правильно спозиционироваться на целевой аудитории — кому такая разработка будет интересна — и вперед!

    Что касается меня — я писал статью из просветительских побуждений. Если найдется смельчак доработать мою конфу — с удовольствием передам ему неисключительные права на нее (достаточно просто сослаться на меня) 🙂

    Reply ↓
  18. artspeed

    (17) проанализировал вашу конфу и запрос HTML. 1С-ники очень хитро генерируют ссылку на скачивание. Предполагаю java скриптом… С разных сторон подходил, но так конечную ссылку не получилось выудить…

    Reply ↓
  19. slavik27

    (16) artspeed, есть такой функционал http://infostart.ru/public/197576/

    сейчас дорабатываем на переделанный сайт 1с, немного изменили пути

    Reply ↓
  20. opx

    А может знает кто как реализовать автоматический редирект. Например при Oauth авторизации осуществляется редирект, а HTTPОтвет возвращает код 302. Было бы неплохо реализовать редирект автоматически. Как это сделать вручную я не сообразил.

    Reply ↓
  21. barelpro

    (20) opx,

    В моем примере как раз редирект отрабатывается. На скриншоте посмотрите, код ответа 302, сервер возвращает в шапке ответа поле Location, в котором указан адрес редиректа

    Reply ↓
  22. fuxic

    Тема отличная, только начал веб-программированием увлекаться. Спасибо

    Reply ↓
  23. iov

    Спасибо. очень доходчиво.

    Reply ↓
  24. DrAku1a

    Все работает. Спасибо!

    Осталось сделать загрузчик новых вышедших обновлений и информер =)

    Reply ↓
  25. soap

    Спасибо ОЧЕНЬ информативно. Будем использовать!

    Reply ↓
  26. barelpro

    (24) DrAku1a,

    не хочу ломать бизнес тем, кто берет за информер деньги 🙂

    Reply ↓
  27. DrAku1a
    Reply ↓
  28. DrAku1a

    (0) Да, и ещё вопрос автору: Чем пользовались для составления процедур парсинга?

    Т.е. вижу по коду, что с помощью ЧтениеHTML и ПостроительDOM создавали объектную модель HTML-документа и дальше с ней работали…

    Вопрос в том — с помощью какого вьювера просматривали DOM?

    Reply ↓
  29. barelpro

    (28) DrAku1a, хороший вопрос!

    был бы вьюер, сэкономил бы 15 минут жизни 🙂

    А так все по наитию

    Reply ↓
  30. seermak

    ошибочно

    Reply ↓
  31. x_under

    Супер! Встраиваем в свою конфигурацию для ИТСников.

    Reply ↓
  32. laeg

    Огромное спасибо за вашу работу. Взял за основу вашу разработку, переделал конечно структуру, версии перенес в РС, переделал справочник Программ, сделал функцию обновления, подцепил к регламенту — в итоге свои идеи воплотил в вашу разработку 🙂

    Reply ↓
  33. lnnd

    Можно еще больше оптимизировать, в место рекурсии обработать ДокументHTML одним циклом c получением всех данных

    В цикле заполняется: Название, гиперссылка, номер версии, дата выхода, планируемый номер версии, планируемая дата выхода, планируемая дата обновления данных, ознакомительный номер версии, дата выхода ознакомительной версии

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

    Процедура ЗаполнитьДанные(ДокументHTML, ТаблицаДанных)
    
    ТекГруппа = «»;
    
    ЭлементыDOM = ДокументHTML.ПолучитьЭлементыПоИмени(«td»);
    
    Для Каждого Элемент Из ЭлементыDOM Цикл
    
    Если Элемент.ИмяКласса = «groupColumn» Тогда
    
    ИндексКолонки = 1;
    ТекГруппа = СокрЛП(Элемент.ТекстовоеСодержимое);
    
    Продолжить;
    
    КонецЕсли;
    
    Если Элемент.ИмяКласса = «nameColumn» Тогда
    
    НоваяСтрока = ТаблицаДанных.Добавить();
    
    НоваяСтрока.Группа = ТекГруппа;
    НоваяСтрока.Название = СокрЛП(Элемент.ТекстовоеСодержимое);
    
    Если ТипЗнч(Элемент.ДочерниеУзлы[0]) = Тип(«ЭлементЯкорьHTML») Тогда
    НоваяСтрока.Гиперcсылка = СокрЛП(Элемент.ДочерниеУзлы[0].Гиперссылка);
    КонецЕсли;
    
    ИндексКолонки = 3;
    
    Продолжить;
    
    КонецЕсли;
    
    ИндексКолонки = ИндексКолонки + 1;
    НоваяСтрока[ТаблицаДанных.Колонки[ИндексКолонки].Имя] = СокрЛП(Элемент.ТекстовоеСодержимое);
    
    КонецЦикла;
    
    КонецПроцедуры

    Показать

    Reply ↓
  34. x_under

    Добрый день.

    Внедрили вашу систему в рабочую базу, все отлично. Потом решили перевести в регламентное задание и тут начались сложности: база в клиент серверном варианте. Регламентное задание запускается. Система получает JSESSIONID, но при получении страницы со списком конфигурации система ничего уже не возвращает. Подскажите куда смотреть

    Reply ↓
  35. buganov

    (19) slavik27, за две тысячи? Есть бесплатные аналоги не хуже )

    Reply ↓
  36. ssokolov1

    Не работает.

    Не грузит список программ.

    До какого то момента работало, потом перестало. Выдавало ошибку, после скачал исправленную.

    Ошибка исчезла, но программы не грузит

    Reply ↓
  37. barelpro

    (36) Спасибо за замечание!

    Выпущена версия 2. 1С слегка изменила алгоритм авторизации, пришлось слегка переписать код, попутно удалось уменьшить количество запросов с 8 до 4.

    Reply ↓
  38. Патриот

    (0) +

    Статья супер, хороший толчок для новичка, чтобы освоить новую для себя технологию 1С. Вы когда писали конфу, то пользовались только платформой 1С и инструментами разработчика браузера, чтобы распутать эту хитрую регистрацию на сайте 1С?

    Reply ↓
  39. Патриот

    (0), Сам вашу конфу не использовал, т.к. не зареган на сайте 1С, но использовал её, как пример

    Reply ↓
  40. barelpro

    (38) Спасибо за оценку! Я пользовался советами своего брата, работающего в Яндексе, поэтому использовал инструменты Яндекс-браузера. А вообще, как мне подсказали здесь, есть инструменты не хуже, например, Firebug для Firefox.

    Reply ↓
  41. deevil

    Статья зачетная для изучения механизмов 1с для веб

    Reply ↓
  42. RustamTurn

    Спасибо за статью. У меня возник вопрос, а как выполнить метод PATCH в объекте Httpсоединение, есть методы PUT,POST,DELETE,GET, а метод PATCH я не обнаружил и не смог воспроизвести его, хоть 1с пишет что к REST можно обращаться с помощью метода PATCH.

    Reply ↓
  43. barelpro

    (42) Да, так и есть, метод PATCH не наблюдается. А зачем он вам?

    Reply ↓
  44. RustamTurn

    (43) ОН используется для замены только указанных свойств, при этом остальные свойства остаются не тронутыми, его можно заменить методом PUT , но он очищает все незаполненные поля.

    Плюс еще в объекте HTTPсервисы, появилась куча методов,которыми из 1с никак не обратиться.

    ● GET;

    ● POST;

    ● PUT;

    ● DELETE;

    ● PATCH;

    ● MERGE;

    ● CONNECT;

    ● OPTIONS;

    ● TRACE;

    ● PROPFIND;

    ● PROPPATCH;

    ● MKCOL;

    ● COPY;

    ● MOVE;

    ● LOCK;

    ● UNLOCK.

    Reply ↓
  45. husky

    А как для обычных форм переделать пожалуйста, нужно под УПП 1.3. Заранее спасибо.

    Reply ↓
  46. husky

    Как определить какие строки для запроса на сервер включать в заголовки, а какие нет, а также как определить возможно какие-то еще параметры нужно задать?

    Reply ↓
  47. stegantsov

    (43)

    Расскажите поподробнее как изменился порядок авторизации в новых релизах

    Reply ↓
  48. Insanity

    Спасибо за статью. Обработка работает. Но не это главное, мне очень пригодился сам метод работы с сайтами, требующими аутентификации. Я оказывается всё делал не совсем правильно. Сэкономили мне массу времени. Ещё раз спасибо.

    Reply ↓
  49. xsazar

    Как теперь получить страницу, после обновления сайта???

    Reply ↓
  50. xsazar
    Reply ↓
  51. markovki

    (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=Accounting3_0_34_10updsetup.exe

    К сожалению, не могу понять, тема для меня новая, а ваш пример не работает, возможно, что-то не так сделал, после нажатия немного думает и ничего не происходит.

    Reply ↓
  52. xsazar

    (51) markovki, по вашим словам, можно понять, что вы ни чего не меняли в процедуре, где идет парсинг страницы релиза, а она обновилась, там то же нужно менять, поэтому и ни чего не происходит, у меня пока только есть регламентное задание, могу показать как идет парсинг страницы, но он для обработки не подойдет.

    Reply ↓
  53. markovki

    (52) xsazar, вы правы, не менял.

    Просто пытаюсь более детально разобраться как происходит переход на releases.1c.ru после авторизации.

    Мне казалось, что для этого необходимы только логин/пароль и кукисы c login.1c.ru.

    Зачем например, парсить страницу и собственно сама переменная inviteCode…

    Reply ↓
  54. NcSteel

    1С изменила сайт и естественно данная конфигурация перестала работать. Будет ли доработана ?

    Reply ↓
  55. barelpro

    Внимание! Выпущена версия 3. Учтен новый дизайн сайта 1С.

    Reply ↓
  56. hibico

    Здорово!

    Прошу разрешение на использование Вашего кода для авторизации в моей разработке для скачивания файлов обновлений «updsetup.exe». Ссылки в коде и публикации гарантирую.

    Reply ↓
  57. Avrobus

    На 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»;

    Reply ↓
  58. barelpro

    (57) Да, что-то они зачастили… Сейчас поправлю и выложу v4

    Reply ↓
  59. barelpro

    (56) Не возражаю. Но если 1С так часто будет менять сайт и авторизацию, то это нифига не enterprise solution! Замучаетесь выпускать заплатки… Я уже замучался…

    Reply ↓
  60. mcfearson

    Подскажите, пожалуйста. У нас здесь есть домены releases.1c.ru и login.1c.ru. Мы авторизуемся на login.1c.ru, шлем туда имя пользователя и пароль, а затем получаем страницу с releases.1c.ru. Куки разные. Как нас идентифицируют как одного и того же пользователя и дают доступ к releases.1c.ru?

    Reply ↓
  61. barelpro

    (60)

    Смотрим функцию НайтиJSESSIONID()

    В первом запросе к releases.1c.ru нам присваивается JSESSIONID

    Во втором запросе к login.1c.ru нам присваиваются параметры inviteCode

    В третьем запросе мы отправляем inviteCode с логином-паролем и получаем ticket

    В четвертом запросе мы связываем JSESSIONID и ticket

    Reply ↓
  62. barelpro

    Внимание! Выпущена версия 5. Оптимизирован код. Заменены методы рекурсивных парсингов на конструкции ПолучитьЭлементПоИдентификатору и ПолучитьЭлементыПоИмени. Старые функции остались закоментированными.

    Спасибо коллеге Avrobus за идею! 🙂

    Reply ↓
  63. mcfearson

    (61) Спасибо.

    Reply ↓
  64. azazana

    А подскажите, каким образом можно посмотреть какой именно post запрос формируется при когда на сайте вводишь логин и пароль?

    Reply ↓
  65. azazana

    Если смотреть в Хроме, то там формируется куча различных запросов. Как отобрать нужный?

    Reply ↓
  66. pihy

    Знающие люди, подскажите, пожалуйста.

    Пытаюсь авторизироваться на сайте средствами 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=»$ПАРОЛЬ$» подсмотрел снифером во время отправки данных на сервер браузером.

    В

    Ответ.ПолучитьТелоКакСтроку();

    попадает заблокированная страница. Т.е. авторизацию не проходит…

    Reply ↓
  67. pihy

    (65) azazana, я искал по статусу «302». POST запрос. Внизу раздел «Form data» переключить на «View source». Эту строку и добавляю в тело запроса.

    Reply ↓
  68. Arxxximed

    Подскажите, пожалуйста , как все таки получать текст страницы полученной в сжатом виде gzip. Устанавливаю Заголовок «Accept-Encoding : gzip»

    По итогу HTTPОтвет.ПолучитьТелоКакСтроку() Возвращает сжатые данные

    Поднял вопрос в теме http://forum.infostart.ru/forum26/topic140086/

    Reply ↓
  69. tormozit

    У меня ОтветHTTP3.КодСостояния = 200, а нужен 302. Почему такое может быть?

    Ответ: в моем случае был неверный логин или пароль

    Reply ↓
  70. Denois1333

    Здравствуйте, подскажите пожалуйста, не получается авторизоваться на сайте интернет банка. Там то тоже используется HTTPS, но если при авторизации на users.v8.1c.ru в теле POST запроса отправляются незашифрованные логин/пароль, то в интернет банк отправляется шифрованный пароль, причем всегда разный. Как сформировать POST запрос на авторизацию?

    Reply ↓
  71. Denois1333

    Разобрался со своей проблемой, там действительно при каждой авторизации происходит шифрование пароля. Я разобрал алгоритм шифрования и на авторизацию отправляю шифрованный пароль. HTTPS соединение и сертификаты здесь не причем. Кодирование идет встроенными процедурами сайта.

    Reply ↓
  72. biformatus

    (14) Чтобы качнуть этот файл нужна в качестве UserAgent указать 1с:Предприятие.

    Reply ↓
  73. info@itshkola.com

    (6)

    Reply ↓
  74. info@itshkola.com

    Валерий, здравствуйте!

    Можно Вас попросить эту обработку скинуть на business.kavun@gmail.com

    Уж очень нужна, а нет возможности скачать.

    Спасибо большое за статью — очень грамотно написана

    Reply ↓
  75. biformatus

    Сломалось что-то.

    Функция РаспарситьinviteCode(Текст)
    
    ЧтениеHTML = Новый ЧтениеHTML;
    ЧтениеHTML.УстановитьСтроку(Текст);
    
    Построитель = Новый ПостроительDOM;
    ДокументHTML = Построитель.Прочитать(ЧтениеHTML);
    
    loginForm = ДокументHTML.ПолучитьЭлементПоИдентификатору(«loginForm»);
    
    inviteCode = «inviteCode=&lt=» + loginForm.Элементы[1].Значение
    + «&execution=» + loginForm.Элементы[2].Значение
    + «&_eventId=» + loginForm.Элементы[3].Значение
    + «&username=» + КонстантыНабор.username
    + «&password=» + КонстантыНабор.password;
    
    //РекурсивныйПарсингСтраницыЛогина(ДокументHTML, inviteCode);
    //inviteCode = inviteCode + «&username=» + КонстантыНабор.username + «&password=» + КонстантыНабор.password;
    
    Возврат inviteCode;
    
    КонецФункции
    

    Показать

    Здесь ошибка — не получает элемент по идентификатору loginForm. Логин и пароль рабочие.

    Reply ↓
  76. Yashazz

    Как разработка — возможно, неплохо. Как статья — хуже некуда. Собственно, статьи нет, есть пара цитат из СП и нихрена не понятно, как этим пользоваться. Разочарован.

    Reply ↓
  77. barelpro

    (75) Проверил только что, был удивлен, что до сих пор работает! )))

    Reply ↓
  78. barelpro

    (76) Если что-то не понятно, это еще не повод разочаровываться! 😉

    Reply ↓
  79. baracuda

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

    Reply ↓
  80. Nicholas

    На третьем шаге, при выполнении ОтправитьДляОбработки() стало возвращать код 500. Что это может означать?

    Reply ↓
  81. realchel

    Код закрытый или открытый?

    Мы тогда купили.

    Reply ↓
  82. DimaShapovaloff

    Исправьте ошибочку в парсилке. &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;
    
    КонецФункции

    Показать

    Reply ↓
  83. DimaShapovaloff

    (80) Исправьте ошибочку в РаспарситьinviteCode(). &execution индекс 4, а не 3

    Reply ↓
  84. barelpro

    (82) Что-то поменялось на сайте 1С?

    Reply ↓
  85. barelpro

    (84) Да действительно поменялось, поправил, спасибо!

    Reply ↓
  86. DimaShapovaloff

    (85) Не за что. Спасибо за публикацию

    Reply ↓
  87. alf2006x

    Статья отличная!

    Особенно порадовало то, что пример загрузки в базе был рабочий. ИТС легко открылся.

    Очень долго не мог понять как работает вся эта пост- и гет- шняга в 1С83.

    Посмотрел пример ИТС и нарисовал подобное для своей задачи.

    Теперь спокойно захожу и скачиваю всё что необходимо на нужный мне сайт (https).

    Гораздо быстрее и надежнее, чем собирался сделать при помощи InternetExplorer.Application.

    По тому пути я дошел почти до конца, упёрся в сохранение файла, понял что окошко в IE11, предлагающее «Вы

    хотите сохранить…» красивыми методами непобедимо, плюнул и пошёл разбираться с интернет запросами.

    Попалась эта статья, один вечер и готово.

    Единственное, маловато написано про то, как в яндекс.браузере правильно читать заголовки: откуда что брать

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

    Reply ↓
  88. Gamm

    (85)

    Опять поменялось) Теперь &execution индекс 6

    (84)

    Reply ↓
  89. warrior1985

    (89)Спасибо!

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *