Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 19:33

Авторизация в wiki через HTTPСоединение

Автор Agregad, 13 фев 2015, 13:48

0 Пользователей и 1 гость просматривают эту тему.

Agregad

Здравствуйте.

Помогите, пожалуйста, разобраться с POST запросами на авторизацию.
Есть wiki проект(самый стандартный), в котором надо авторизироваться и насоздавать страниц по шаблону, типо справки по разработке.

Так вот с авторизацией и не получается...



Соединение = Новый HTTPСоединение("wiki.test1.ru");

Заголовки = Новый Соответствие(); // тут я пробовал и кук имени пользователя передавать и без
Заголовки.Вставить("Cookie", "wiki_mwUserName=Николай;");

Запрос = Новый HTTPЗапрос("/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D1%85%D0%BE%D0%B4"); // страница входа
ОтветHTTP = Соединение.Получить(Запрос); // обычный GET для получения кука сессии

ИсхКук = ОтветHTTP.Заголовки.Получить("Set-Cookie");
Кук = Лев(ИсхКук, Найти(ИсхКук, ";")+1);

        /// Тут я с полученной страницы пытаюсь выдернуть полученный токен
Код_ = ОтветHTTP.ПолучитьТелоКакСтроку();
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.УстановитьСтроку(Код_);
ПостроительDOM = Новый ПостроительDOM;
ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);

ЭлементыwpLoginToken = ДокументHTML.ПолучитьЭлементыПоИмени("input");

ЭлементwpLoginToken = Неопределено;
Для каждого Эл Из ЭлементыwpLoginToken Цикл
Если Эл.Имя = "wpLoginToken" Тогда
ЭлементwpLoginToken = Эл.Значение;
Прервать;
КонецЕсли;
КонецЦИкла;

// Строка запроса
СтрокаОтправки = "wpName=Николай&wpPassword=123&wpLoginAttempt=%D0%92%D0%BE%D0%B9%D1%82%D0%B8&wpLoginToken=Токен";
СтрокаОтправки = СтрЗаменить(СтрокаОтправки, "Токен", ЭлементwpLoginToken);

        // формирую заголовок
        // пробую маскироваться под клиента другого уже, так как были подозрения на то, что по клиенту режется
Заголовки = Новый Соответствие();
Заголовки.Вставить("Accept", "text/html, application/xhtml+xml, */*");
Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko");
Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
Заголовки.Вставить("Content-Length", СтрДлина(СтрокаОтправки));
Заголовки.Вставить("Cookie", Кук);
HTTPЗапрос = Новый HTTPЗапрос("/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D1%85%D0%BE%D0%B4&action=submitlogin&type=login", Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаОтправки); // Шлю POST
ОтветHTTP = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
Код_ = ОтветHTTP.ПолучитьТелоКакСтроку();

// Тут ОтветHTTP должен вернуть код переадресации и location, но возвращает всегда 200 и страницу, где пишет, что логин пустой. Такое чувство что не уходит тело POST.

Помогите разобраться, пожалуйста.


Agregad


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск