crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в QNetworkAccessManager и QStateMachine для авторизации
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
SABROG Дата 16.5.2010, 18:32
  Я пока не разобрался как можно привязать переход состояния (transition) в зависимости от QNetworkReply::attribute(), который проверяется на сигнал QNetworkAccessManager::finished(). То ли класс своего состояния писать, то ли класс перехода писать, что скорее всего. Тогда получается, чтобы сделать переход, мне нужно унаследоваться от QSignalTransition, вызвать конструктор базового класса с сигналом QNetworkAccessManager::finished(). Затем в eventTest() отправлять true, если QNetworkReply::attribute() содержит условия необходимые для перехода. Проблема только в том, что аттрибутов куча и на многие из них хочется своё состояние и как следствие такое же количество переходов от одного состояния к другому. Нужно подумать еще.
kuzulis Дата 15.5.2010, 13:45
  Имхо, концепция конечного автомата действительно уместна в данном случае, т.к. Алгоритм состоит из нескольких шагов, состояний. Разбить это дело на состояния не должно представлять сложностей. И потом прыгать от одного состояния к другому пока не достигнем заданного состояния.
SABROG Дата 15.5.2010, 12:19
  Хотел написать утилиту для работы, которая парсит данные с сайта партнера, но где-то через день к странице их сайта добавили форму авторизации. Не бросать же на пол пути... Первая проблема с которой я столкнулся это ошибка не существующей страницы (404). Оказалось, что после передачи ссылки в QNetworkAccessManager на выходе в QNetworkReply::url() по какой-то причине добавляется знак вопроса "?" в конец запроса, хотя в передаваемом QUrl его никогда небыло и используются только английские буквы без спец.символов, которые надо было бы экранировать. Решил добавлением "/" в конец url'a, оставив разбор проблемы на потом. Затем возникла проблема с кодом 302 Moved Permanently, эту проблемы мне вроде бы удалось решить через обработку возвращаемых кодов от QNetworkReply. QNetworkAccessManager просто не имеет API типа "Следовать редиректу". Приходится формировать новый запрос для этого и идти на второй круг. Следующая проблема возникла в форме авторизации, мало того, что сервак ставит куку с номером сессии, так он еще генерит какой-то хеш, который подставляет в поле внутри HTML странички. Без регулярки по всей страницы не обойтись. Сначала нужно как-то продетектить, что сервак хочет авторизации, потом отпарсить HTML, чтобы выцепить передаваемый ключ и сформировать POST запрос для самой авторизации. Можно конечно сделать все это жестко, по шагам. Но у меня 12 партнеров, такое же количество сайтов, каждый из них делает как ему вздумается. Сегодня одна версия авторизации, завтра другая и т.п. В общем было бы правильно это дело перенести на скрипты, чтобы не нужно было даже перекомпилировать программу, если чего у них изменится.

Хочу проконсультироваться как это правильней сделать. Думаю авторизацию и дальнейшую работу сделать через машину состояний, но похоже эту машину надо будет использовать в скрипте (QScriptEngine). Вспомнил про проект SCXML. Может действительно на нем как-то сделать?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 20.4.2024, 4:16