8.х WEB Post запрос

Тема в разделе ""1C:Web-Сервер"", создана пользователем kisol, 25 сен 2016.

  1. TopicStarter Overlay
    kisol
    Offline

    kisol Профессионал в 1С

    Регистрация:
    25 июл 2012
    Сообщения:
    606
    Симпатии:
    81
    Баллы:
    54
    Пытаюсь зайти на сайт adm.trudvsem.ru через post запрос.
    Не получается HTTPОтвет.ПолучитьТелоКакСтроку(); - возвращается пустую строчку, нет тела страницы.

    Возвращается 302 ответ

    Код:
      Заголовки = Новый Соответствие;
       Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
        Заголовки.Вставить("Content-Length", "58");
        HTTPЗапрос = Новый HTTPЗапрос("/login", Заголовки);
        HTTPЗапрос.УстановитьТелоИзСтроки("username=ars&password=dd");
        HTTPСоединение = Новый HTTPСоединение("adm.trudvsem.ru",,,,,,Новый ЗащищенноеСоединениеOpenSSL);
        HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
        HTTPОтвет.ПолучитьТелоКакСтроку();
    
    Последнее редактирование: 25 сен 2016
  2. 1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    164
    Баллы:
    104
    Я бы попробовал по-старинке через временный файл ответа =)
    Ну раз 301 - Moved Permanently, то попробуй получить новый адрес через
    Код:
    Если HTTPОтвет.КодСостояния = 301 Тогда
        НовыйАдрес = HTTPОтвет.Заголовки.Получить("location")
    КонецЕсли;
    А вообще, я даже авторизоваться не могу на этом ресурсе)

    PS: Кот, глотни молочка)
    kisol нравится это.
  3. TopicStarter Overlay
    kisol
    Offline

    kisol Профессионал в 1С

    Регистрация:
    25 июл 2012
    Сообщения:
    606
    Симпатии:
    81
    Баллы:
    54
    Затупил, 302 возвращается.
    А вот что в соответствии HTTPОтвет, так логин и пароль не правильные указаны в примере. [​IMG]
  4. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104
    1) и как ты Content-Length посчитал? Для начала выкинь эту строку. Без тебя посчитает.
    2) документация на этот ресурс есть? что там за параметр "1" в адресной строке когда на страницу заходишь?
  5. TopicStarter Overlay
    kisol
    Offline

    kisol Профессионал в 1С

    Регистрация:
    25 июл 2012
    Сообщения:
    606
    Симпатии:
    81
    Баллы:
    54
    1. Выкинул
    2. Никакой документации, параметр от 1 до 3 я замечал прыгает
  6. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104
    не уверен конечно что в этом дело, но все-таки - так может передать туда этот параметр?
  7. TopicStarter Overlay
    kisol
    Offline

    kisol Профессионал в 1С

    Регистрация:
    25 июл 2012
    Сообщения:
    606
    Симпатии:
    81
    Баллы:
    54
    Передать так HTTPЗапрос = Новый HTTPЗапрос("/login?1", Заголовки);

    Нет эффекта
  8. TopicStarter Overlay
    kisol
    Offline

    kisol Профессионал в 1С

    Регистрация:
    25 июл 2012
    Сообщения:
    606
    Симпатии:
    81
    Баллы:
    54
    Создал обработку на ней есть ПолеХТМЛ и несколько кнопок, которые открывают страницу, заполняют данными и входят на сайт, далее проверяем есть ли нужные данные, хочу заставить это дело работать самостоятельно. Проблема в том что если последовательно вызывать процедуры, полеХТМЛ не успевает загрузиться, а уже идет проверка наличия полей заполнения и выдает ошибку что их нет. Пробовал подключать обработчикОжидания =(

    [​IMG]

    {Обработка.ВходНаСайт.Форма.Форма.Форма(50)}: Поле объекта не обнаружено (username)
    Документ.getElementsByName("username").username.value = "ar";

    Код:
       
    &НаКлиенте
    Процедура ЗапуститьБразуер(Команда)  экспорт
        Инет = "http://adm.trudvsem.ru";
    КонецПроцедуры
    &НаКлиенте
    Процедура ЗАполнитьДанные(Команда)
        Документ = Элементы.Инет.Документ;
        СТ = "submit";   
        ЭлементHTMLДокумента = Документ.querySelector("[type="""+СТ+"""]");
        Документ.getElementsByName("username").username.value = "ar";
        Документ.getElementsByName("password").password.value = "d";
        ЭлементHTMLДокумента.click();
        Инет = "http://adm.trudvsem.ru/moderation/moderation.cv";
       
    КонецПроцедуры
    
    &НаКлиенте
    Процедура перейтиНаДругойСайт(Команда)
        Документ = Элементы.Инет.Документ;
        Инет = Документ.url + "-1.ILinkListener-header-logout";
    КонецПроцедуры
    
    &НаКлиенте
    Процедура ПроверитьРезюме(Команда)
        Документ = Элементы.Инет.Документ;
        КодХмтл = Документ.documentElement.innerHTML;
        Позиция = Найти(КодХмтл, "Приморский край");
        Сообщить(Позиция);
    КонецПроцедуры
    
  9. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104
    зафигач туда паузу после начала перехода на страницу.
    Что-то вроде:
    Код:
    Процедура Пауза(ВремяЗадержки) Экспорт
       
        #Если Клиент Тогда
            ОбработкаПрерыванияПользователя();
        #КонецЕсли
       
        Соединение = Неопределено;
        Попытка
            Соединение = Новый COMОбъект("WScript.Shell");
        Исключение
        КонецПопытки;
       
        Если Соединение <> Неопределено Тогда
            Соединение.Run("ping 127.0.0.1 -n " + Формат(ВремяЗадержки, "ЧГ="), 0, 1);
        КонецЕсли;
       
        Соединение = Неопределено;
       
    КонецПроцедуры
    
    kisol нравится это.
  10. TopicStarter Overlay
    kisol
    Offline

    kisol Профессионал в 1С

    Регистрация:
    25 июл 2012
    Сообщения:
    606
    Симпатии:
    81
    Баллы:
    54
    Задержка работает, но все равно на форме полехтмл не загружается, это видно в отладчике что там еще не определена. about:blank
    [​IMG]
  11. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104
    вариант 2.
    сделай что-то вроде:
    Код:
            Пока Инет.Busy ИЛИ Документ.ReadyState < 4 Цикл
                Пауза(1);
            КонецЦикла;
    
    Смотри - свойство Busy проверь, это код для com объекта, на управляемых формах доступа к этому свойству вероятно нет. Убери тогда эту часть условия.
    По поводу ReadyState - посмотри какие там значения в управляемом приложении, опять таки то что я написал выше это для com объекта, там с числом сравнивается, а у тебя вероятно будет вроде ReadyState <> "ready" или как-то так, посмотри, какое там значение когда документ полностью загружен.
    kisol нравится это.
  12. TopicStarter Overlay
    kisol
    Offline

    kisol Профессионал в 1С

    Регистрация:
    25 июл 2012
    Сообщения:
    606
    Симпатии:
    81
    Баллы:
    54
    У меня останавливается на interactive, но все равно не получается обратится к элементам, видимо еще не загружены.
    Может перейти на обычное приложение, есть отличия?
  13. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104
    Кардинальных думаю нет.

    Ну тогда наверно логику меняй. У браузера же есть событие "окончание загрузки". Вон там и пробуй вставлять уже свои логины-пароли.