Russian Qt Forum
Сентябрь 30, 2024, 18:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Авторизация в Твиттере, не могу обнаружить проблему ((  (Прочитано 5755 раз)
DpoHro
Гость
« : Май 03, 2011, 15:22 »

Первым шагом гружу, страницу авторизации твиттера.
Я правильно понимаю, что QNetworkAccessManager все куки сохранит и при формировании через него следующего запроса их в него пихать не надо?
Вот на втором этапе (авторизация) и не получается чтото ((
Пытаюсь повторить на QT, вот это: http://www.newbug.info/2010/10/twitter-oauth.html
Код на PHP работает, проверял, я же не могу авторизоваться, возвращается страница с ошибкой (

Код:
#include <QDebug>
#include <QRegExp>

#include "qrequester.h"

QRequester::QRequester(QObject *parent)
: QThread(parent)
{
m_netManager = new QNetworkAccessManager();

QReNetworkCookieJar *cookieJar = new QReNetworkCookieJar(this);

m_netManager->setCookieJar(cookieJar);

connect(m_netManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
}

QRequester::~QRequester()
{

}

QNetworkRequest QRequester::makeRequest(QUrl _url)
{
QNetworkRequest request(_url);

request.setRawHeader("Host", "mobile.twitter.com");
request.setRawHeader("User-Agent", "Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.0.10) Gecko/2009042809 GranParadiso/3.0.10");
request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
request.setRawHeader("Accept-Language", "ru,en-us;q=0.7,en;q=0.3");
//request.setRawHeader("Accept-Encoding", "gzip,deflate");
request.setRawHeader("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.7");
request.setRawHeader("Keep-Alive", "300");
request.setRawHeader("Connection", "keep-alive");

return request;
}

void QRequester::DoRequest()
{
QNetworkRequest request = makeRequest(QUrl("https://mobile.twitter.com/session/new"));

QNetworkReply *reply = m_netManager->get(request);
//reply->ignoreSslErrors();

m_step = STEP_AUTHPAGE;
}

void QRequester::replyFinished(QNetworkReply* _reply)
{
qDebug() << "Reply Finished!";

switch (m_step){
case STEP_AUTHPAGE:{
QString html = QString(_reply->readAll());

// Пробуем достать урл логина и токен
QRegExp rxAction = QRegExp("action=\"([a-zA-Z0-9\.\-\:\/]+)\"", Qt::CaseInsensitive);
rxAction.indexIn(html);
QString loginURL = rxAction.cap(1);

QRegExp rxToken = QRegExp("input name=\"authenticity_token\" type=\"hidden\" value=\"([a-zA-Z0-9]+)\"", Qt::CaseInsensitive);
rxToken.indexIn(html);
QString token = rxToken.cap(1);

qDebug() << "Login URL: "+loginURL;
qDebug() << "Login Token: "+token+"="+token.toLocal8Bit();

QNetworkRequest request = makeRequest(QUrl(loginURL));



QUrl postData;

QReNetworkCookieJar *cookie = qobject_cast<QReNetworkCookieJar*>(_reply->manager()->cookieJar());
QList<QNetworkCookie> cookieList = cookie->getAllCookies(); //qvariant_cast<QList<QNetworkCookie> >(_reply->header(QNetworkRequest::SetCookieHeader).toList());

qDebug() << " ----- Cookies ----- ";
request.setHeader(QNetworkRequest::CookieHeader, QVariant::fromValue(cookieList));

request.setRawHeader("authenticity_token", token.toLocal8Bit());
request.setRawHeader("username", "*****");
request.setRawHeader("password", "*****");

QNetworkReply *reply = m_netManager->post(request, postData.encodedQuery());
m_step = STEP_HOMEPAGE;
} break;
case STEP_HOMEPAGE:{
QString html = QString(_reply->readAll());
qDebug() << html;

} break;
}

}

Да, кстати, первый запрос делается ф-ей get - если использовать post - не получается.
Записан
DpoHro
Гость
« Ответ #1 : Май 03, 2011, 20:32 »

Не могу ничем отмониторить что передается в результате,
если передаю логин/пароль в m_netManager->post(request, postData.encodedQuery());
в postData то такое впечатление что ничего не передается, сервер выдает страницу с переадресацией.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #2 : Май 03, 2011, 22:24 »

Тут:
Код
C++ (Qt)
QUrl postData;
 
QReNetworkCookieJar *cookie = qobject_cast<QReNetworkCookieJar*>(_reply->manager()->cookieJar());
QList<QNetworkCookie> cookieList = cookie->getAllCookies(); //qvariant_cast<QList<QNetworkCookie> >(_reply->header(QNetworkRequest::SetCookieHeader).toList());
 
qDebug() << " ----- Cookies ----- ";
request.setHeader(QNetworkRequest::CookieHeader, QVariant::fromValue(cookieList));
 
request.setRawHeader("authenticity_token", token.toLocal8Bit());
request.setRawHeader("username", "*****");
request.setRawHeader("password", "*****");
 
QNetworkReply *reply = m_netManager->post(request, postData.encodedQuery());
в последней строчке postData пустая. так и задумано?

как вариант можно подглядеть реализацию в уже существующих Qt библиотеках: http://dev.twitter.com/pages/libraries#cplusplus
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
DpoHro
Гость
« Ответ #3 : Май 04, 2011, 07:32 »

Да я с postData экспериментировал в таком варианте хоть приходит нормальный ответ от твиттера, в виде страницы с ошибкой, такое ощущение что в этом варианте не доходят всеже логин пароль и токен, если же я запихиваю их в postData тогда сервер отвечает какой то страницей с редиректом на mobile.twitter.com ((

Уже голову сломал (
Записан
DpoHro
Гость
« Ответ #4 : Май 04, 2011, 19:20 »

Народ как параметры правильно передавать POST запроса через эту фигню?

У меня стойкое ощущение что дело именно в этом.

Если оставляю в строке

Код:
QNetworkReply *reply = m_netManager->post(request, "");

data = пустой строкой, то впринципе прилетает в страница как если бы я неверно ввел логин или пароль или вообще бы не ввел ничего.

Если я туда пытаюсь чтото передать - вертается вот что:

Код:
<html><body>You are being <a href="http://mobile.twitter.com/">redirected</a>.</body></html>

То есть будто бы адресом ошибся.

Need HELP )))
Записан
DpoHro
Гость
« Ответ #5 : Май 04, 2011, 21:21 »

Блин, вот ну надо же, все ж ведь правильно, возвращает перенаправление на главную после удачного залогинивания, а я тут голову ломаю, надо было ответ сервера прочитать, а он присылает 302 и Location - куда ))
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.107 секунд. Запросов: 23.