QNetworkAccessManager и QStateMachine для авторизации |
Здравствуйте, гость ( Вход | Регистрация )
QNetworkAccessManager и QStateMachine для авторизации |
SABROG |
15.5.2010, 12:19
Сообщение
#1
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Хотел написать утилиту для работы, которая парсит данные с сайта партнера, но где-то через день к странице их сайта добавили форму авторизации. Не бросать же на пол пути... Первая проблема с которой я столкнулся это ошибка не существующей страницы (404). Оказалось, что после передачи ссылки в QNetworkAccessManager на выходе в QNetworkReply::url() по какой-то причине добавляется знак вопроса "?" в конец запроса, хотя в передаваемом QUrl его никогда небыло и используются только английские буквы без спец.символов, которые надо было бы экранировать. Решил добавлением "/" в конец url'a, оставив разбор проблемы на потом. Затем возникла проблема с кодом 302 Moved Permanently, эту проблемы мне вроде бы удалось решить через обработку возвращаемых кодов от QNetworkReply. QNetworkAccessManager просто не имеет API типа "Следовать редиректу". Приходится формировать новый запрос для этого и идти на второй круг. Следующая проблема возникла в форме авторизации, мало того, что сервак ставит куку с номером сессии, так он еще генерит какой-то хеш, который подставляет в поле внутри HTML странички. Без регулярки по всей страницы не обойтись. Сначала нужно как-то продетектить, что сервак хочет авторизации, потом отпарсить HTML, чтобы выцепить передаваемый ключ и сформировать POST запрос для самой авторизации. Можно конечно сделать все это жестко, по шагам. Но у меня 12 партнеров, такое же количество сайтов, каждый из них делает как ему вздумается. Сегодня одна версия авторизации, завтра другая и т.п. В общем было бы правильно это дело перенести на скрипты, чтобы не нужно было даже перекомпилировать программу, если чего у них изменится.
Хочу проконсультироваться как это правильней сделать. Думаю авторизацию и дальнейшую работу сделать через машину состояний, но похоже эту машину надо будет использовать в скрипте (QScriptEngine). Вспомнил про проект SCXML. Может действительно на нем как-то сделать? |
|
|
Текстовая версия | Сейчас: 3.1.2025, 2:50 |