Имя: Пароль:
1C
1С v8
передать куки в в поле html-документа
,
0 gls
 
05.05.15
19:54
здравствуйте.
помогите, пожалуйста,войти в яндекс-эккаунт и под его учеткой открыть страницу в поле html-документа.

что пытаюсь сделать:
1. программно авторизоваться в яндексе (возможно, что здесь требуется еще пара post-get запросов - fiddler делает несколько переадресаций),
но куки вроде нормальные
2. получить куки
3. передать их в html-поле.

вопросы:
1. правильно ли выбран путь решения задачи?
2. возможно ли передать куки?


    login = "testApi2015";
    password = "";
    
    timestamp = ТекущаяДата() - '19700101';
    
    post = "mode=auth&login=" + login + "&passwd=" + password + "&timestamp=" + timestamp;
    
    host = "passport.yandex.ru";
    
    ssl = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows());
    
    header = Новый Соответствие();
    header.Вставить("POST HTTP/1.1");  //в первой строке указывается метод запроса, имя ресурса и версия протокола
    header.Вставить("Content-type", "application/x-www-form-urlencoded");
    header.Вставить("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)");
    
    Запрос = Новый HTTPЗапрос("/passport", header); //первый параметр - путь относительно passport.yandex.ru (passport.yandex.ru/passport)
    Запрос.УстановитьТелоИзСтроки(post);
    
    Соединение = Новый HTTPСоединение(host,,,,,,ssl);
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
    
    сообщить("КодСостояния = " + Ответ.КодСостояния);
    
    Если Ответ.КодСостояния = 301 или Ответ.КодСостояния = 302 Тогда
        АдресПреадресации = Ответ.Заголовки["Location"];
        Сообщить(АдресПреадресации);
        
        Куки = Ответ.Заголовки["Set-Cookie"];
        Сообщить(Куки);
        
    ИначеЕсли Ответ.КодСостояния = 200 Тогда
        Куки = Ответ.Заголовки["Set-Cookie"];
        Сообщить(Куки);
    КонецЕсли;
    
    АдресСтраницыАутентификации = "";
    АдресСтраницыАутентификации = "http://internet.yandex.ru/";;
    Элементы.АдресСтраницыАутентификации.Документ.Cookie = Ответ.Заголовки["Set-Cookie"];


где АдресСтраницыАутентификации - html-поле

результат работы:
<CODE>
    КодСостояния = 302
    АдресПереадресации = https://passport.yandex.ru/auth/finish/?track_id=f1aa241cf3bf09d8c367a9d68cf134c714
    Куки = yandexuid=486685191430841714; Max-Age=315360000; Domain=.yandex.ru; Path=/; Expires=Fri, 02 May 2025 16:01:54 GMT, Session_id=3:1430841714.5.0.1430841714822:Ln5PXw:14.0|316285021.0.2|127702.741532.Yz8eP8cnJy63iDjVi31ep7TDgYg; Domain=.yandex.ru; expires=Tue, 19 Jan 2038 03:14:07 GMT; Path=/; HttpOnly, sessionid2=3:1430841714.5.0.1430841714822:Ln5PXw:14.1|316285021.0.2|127702.157253.buIYfektW6n2CYzH1j9jFBzMB6Q; Domain=.yandex.ru; expires=Tue, 19 Jan 2038 03:14:07 GMT; Path=/; secure; HttpOnly, yp=1746201714.udn.cDp0ZXN0YXBpMjAxNQ%3D%3D; Domain=.yandex.ru; expires=Tue, 19 Jan 2038 03:14:07 GMT; Path=/, ys=udn.cDp0ZXN0YXBpMjAxNQ%3D%3D; Domain=.yandex.ru; Path=/, L=Wk9/fwNbZGFaTENBc2xCb3FSelhceVRRNlJGM1g8GFxSVgA=.1430841714.11655.367013.cc3807bc6cc41fd526e73e1738f9b359; Domain=.yandex.ru; expires=Tue, 19 Jan 2038 03:14:07 GMT; Path=/, yandex_login=testapi2015; Domain=.yandex.ru; expires=Tue, 19 Jan 2038 03:14:07 GMT; Path=/, my=YzYBAQA=; Domain=.yandex.ru; expires=Tue, 19 Jan 2038 03:14:07 GMT; Path=/</CODE>

попытка передачи куков - инфа из поля html-документа:
<CODE>...
Поддержка cookies: не определено
Значение session_id: отсутствует
...
COOKIE ВАШЕГО БРАУЗЕРА:
yp:
ys:
yandexuid: 3009867011430834664/</CODE>
1 gls
 
05.05.15
20:05
изначальная задача - получать токен доступа к api сервисов яндекса для разных эккаунтов.
поскольку полностью программно токен получать невозможно - пытаюсь автоматизировать этот процесс хотябы частично.
2 Котокот
 
05.05.15
20:12
Так токен один раз получать надо вроде как, это можно и вручную сделать, а потом хранить его в базе.
3 gls
 
05.05.15
20:14
для 1-2 акков получить не проблема.
у меня акков значительно больше + с программой будут работать менеджеры без специальных знаний (т.е. чем проще интерфейсная часть - тем лучше).
4 Garykom
 
гуру
05.05.15
20:20
(3) а это Вы с яндексом согласовали?
5 gls
 
05.05.15
20:25
в согласовании большой необходимости нет - яндекс ставит ограничение на интенсивность использования запросов.
а если вы про регистрацию приложения для взаимодействия с api - то приложение зарегистрировано и отмодерировано.
6 trad
 
05.05.15
20:29
(0) 2. возможно ли передать куки?

header.Вставить("Cookie", "yandexuid=486685191430841714; Max-Age=315360000; Domain=.yandex.ru; Path=/; Expires=Fri, 02 May 2025 16:01:54 GMT, Session_id=3:1430841714.5.0.1430841714822:Ln5PXw:14.0|316285021.0.2|127702.741532.Yz8eP8cnJy63iDjVi31ep7TDgYg; Domain=.yandex.ru; expires=Tue, 19 Jan 2038 03:14:07 GMT; Path=/; HttpOnly, sessionid2=3:1430841714.5.0.1430841714822:Ln5PXw:14.1|316285021.0.2|127702.157253.buIYfektW6n2CYzH1j9jFBzMB6Q; Domain=.yandex.ru; expires=Tue, 19 Jan 2038 03:14:07 GMT; Path=/; secure; HttpOnly, yp=1746201714.udn.cDp0ZXN0YXBpMjAxNQ%3D%3D; Domain=.yandex.ru; expires=Tue, 19 Jan 2038 03:14:07 GMT; Path=/, ys=udn.cDp0ZXN0YXBpMjAxNQ%3D%3D; Domain=.yandex.ru; Path=/, L=Wk9/fwNbZGFaTENBc2xCb3FSelhceVRRNlJGM1g8GFxSVgA=.1430841714.11655.367013.cc3807bc6cc41fd526e73e1738f9b359; Domain=.yandex.ru; expires=Tue, 19 Jan 2038 03:14:07 GMT; Path=/, yandex_login=testapi2015; Domain=.yandex.ru; expires=Tue, 19 Jan 2038 03:14:07 GMT; Path=/, my=YzYBAQA=; Domain=.yandex.ru; expires=Tue, 19 Jan 2038 03:14:07 GMT; Path=/");
7 gls
 
05.05.15
20:38
(6) 2. возможно ли передать куки?
в контексте 3. передать их в html-поле.

т.е. как вы предлагаете передать не проблема.
но это работает для передачи в post или get запросе.
а мне надо передать в поле html-документа.

смысл всего этого:
я программно провожу авторизацию и отображаю страничку в поле html-документа с уже авторизованным пользователем.
8 trad
 
06.05.15
09:10
(7) могу сильно ошибаться, но мои мысли такие
В поле html работает ie.
Скормить ie свои куки возможно и не получится вовсе.
Можно попытаться входить в аккаунт прямо в поле html программно вводя логин/пароль и нажимая кнопки.
9 gls
 
06.05.15
09:23
(8) скорее всего так и сделаю, раз уж по-другому не получается.
10 Serginio1
 
06.05.15
11:11
11 trad
 
06.05.15
11:16
(10) это куки полученные в ответе
ТС нужно куки передать в запросе
12 Поpyчик-4
 
06.05.15
11:20
(0) Узнайте больше о HTTP-запросах и о программной работе с сайтами, требующими авторизацию
http://catalog.mista.ru/public/255881/
13 Serginio1
 
06.05.15
11:37
(11) Это свойство как для чтения так и для записи. Просто не через HTTPСоединение а через IE
Например Поле Html документа

Поле Html документа
14 Serginio1
 
06.05.15
11:38
13+ в формировании Html документа может принимать активное участие JS.
15 gls
 
06.05.15
11:55
(12) с HTTP запросами работать умею.
сайт, с котрым взаимодействую (яндекс) не дает получить нужную информацию только программно. требуется ручное нажатие на кнопку (по крайней мере это ответ поддержки яндекса).
16 gls
 
06.05.15
12:00
(13) пыталась записать через:
<CODE>Элементы.АдресСтраницыАутентификации.Документ.Cookie = Ответ.Заголовки["Set-Cookie"];/</CODE>

ошибки нет, но куки не передались:
<CODE>
COOKIE ВАШЕГО БРАУЗЕРА:
yp:
ys:
yandexuid: 3009867011430834664/</CODE>

т.е. страница открылась без куков, в новой сессии.
17 trad
 
06.05.15
12:06
(13) про полеХТМЛдокумента и говорим
что нам дает возможность записывать в свойство Документ.cookie ?
Ничего.
Нам не надо менять куки уже полученного документа, нам нужно передать куки в запросе к серверу, который выполняется при вызове ПолеHTMLДокумента.Перейти()
18 gls
 
06.05.15
12:14
(14) не могли бы чуть раскрыть вашу мысль.
сама работала только с HTML-запросами,
с 1Сными полями HTML-документов не работала. как к ним прикрутить JS, а еще лучше php?
хотя бы ключевые фразы для поиска укажите)

вообще задача такова:
есть логины - пароли акков
войдя в акк надо дать доступ моему приложению и получить токен.
если решать на уровне полей html-документов 1С и ручного ввода логина-пароля
то задача сводится к необходимости _программно_ выйти из предыдущего акка.
19 Serginio1
 
06.05.15
12:34
(18) php это сторона сервера. JavaScript может учавствовать для формирования DOM.

Из недавнего
Из 1с нажать на кнопку HTML
Поле Html документа
v8: Парсинг сайта... ПолучитьЭлементПоИдентификатору - как заставить его работать?
20 Serginio1
 
06.05.15
12:39
21 Serginio1
 
06.05.15
12:40
22 gls
 
06.05.15
13:39
Serginio1, спасибо. буду изучать.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.