[C++/QT4] logowanie, cookies QNetworkRequest


(Lupinek7) #1

Wiem, że ten temat był już poruszany (choćby tutaj), jednak ja natrafiłem na problem, z którym nie umiem sobie poradzić mimo znalezionych poprzez google informacji.

Mianowicie: Wykorzystuję QT4 i próbuję połączyć się z prostą stroną www, do której poprzez POST przesyłam login i hasło, ona mi numer sesji (jako cookie), który następnie muszę zapamiętać i przy kolejnej wizycie jej odesłać, żeby mnie rozpoznała. W PHP przy pomocy CURL działa mi to bez problemu, a tu nie wiem co dalej...

QNetworkAccessManager *manager = new QNetworkAccessManager(this);

    QByteArray postData;

    QNetworkRequest request;

    postData.append("login=mojlogin");

    postData.append("password=mojehaslo");

    request.setUrl(QUrl("adrestejstrony"));

    foreach(QNetworkCookie ciastko, cookies)

    {

        request.setRawHeader("Cookie", ciastko.toRawForm(QNetworkCookie::NameAndValueOnly));

        qDebug(ciastko.toRawForm(QNetworkCookie::NameAndValueOnly)); //do celow testowych

    }

    manager->post(request, postData);

W ten sposób się łączę i jeśli wszystko jest ok (jeśli zostanie wysłany sygnał finished(QNetworkReply*)) to wywoływany jest następujący kod:

QNetworkAccessManager *manager = reply->manager();

cookies.append(manager->cookieJar()->cookiesForUrl(QUrl("adrestejstrony")));

gdzie cookies to QList. No i wydaje się, jakby rzeczywiście nagłówek z numerem sesji był poprawnie przesyłany, bo qDebug wyswietla mi przy kazdym wywolaniu funkcji tylko jeden numer ssid (a kiedy wywale wysylanie cookie to przy kazdym polaczeniu pojawia sie nowy), jednak jeśli zrobię

qDebug(reply->readAll());

to niestety cały czas widzę formularz logowania (dane logowania na pewno są poprawne!). W czym problem? Czy tablica POST się błędnie przesyła? Zastanawia mnie jeszcze fakt, że kiedy zrobię (już po połączeniu, w drugiej części kodu)

foreach(QByteArray header, reply->rawHeaderList())

        qDebug(header+": "+reply->rawHeader(header));

To przy pierwszym razie pojawia się nagłówek Set-Cookie: PHPSESSID=... jednak przy kolejnym razie nagłówka tego nie ma (to dobrze, bo to znaczy, że strona mnie rozpoznała), jednak też nie pojawia się tam Cookie (czyli niby to co ja miałem wysłać do strony). Czy tak na pewno powinno być?

Dodam jeszcze, że za pierwszym razem program łączy się ze stroną logowania, a kolejne próby połączeń są już ze stroną wymagającą bycia zalogowanym. No i skrypy w PHP z użyciem CURL działa...

Liczę na pomoc bardziej zaawansowanych użytkowników! :slight_smile: