Unlimited Temat założony przez niniejszego użytkownika |
[C++/Qt] Poruszanie się po stronach www » 2013-05-06 22:04:11 Witam. Doszedłem do momentu, w którym coraz trudniej jest coś dobrego w internecie znaleźć na swój problem. Kompletnie nie potrafię poradzić sobie z poruszaniem się po stronach www. Otóż umiem tylko wpisać dane do inputbox'ów na stronie i nic poza tym. Chciałbym się dowiedzieć jak np przycisnąć buttona? Jak np przejść do jakiegoś tematu i napisać tam posta? Jak wyświetlić temat/post w programie (jak go pobrać do zmiennej)? Mój dotychczasowy kod: ( już od 2 dni stoję w miejscu, na próżno moje szukanie w google :/ ) #ifndef DIALOG_H #define DIALOG_H
#include <QDialog> #include <QNetworkAccessManager> #include <QNetworkRequest> #include <QNetworkReply> #include <QUrl> #include <QDebug>
namespace Ui { class Dialog; }
class Dialog : public QDialog { Q_OBJECT public: explicit Dialog( QWidget * parent = 0 ); ~Dialog(); private: Ui::Dialog * ui; QNetworkAccessManager * manager; public slots: void test( QNetworkReply * ); };
#endif
#include "dialog.h" #include "ui_dialog.h"
Dialog::Dialog( QWidget * parent ) : QDialog( parent ) , ui( new Ui::Dialog ) { ui->setupUi( this ); manager = new QNetworkAccessManager( this ); connect( manager, SIGNAL( finished( QNetworkReply * ) ), this, SLOT( test( QNetworkReply * ) ) ); QByteArray postData; QUrl paare; QNetworkRequest request; request.setUrl( QUrl( "http://127.0.0.1/ucp.php?mode=login" ) ); request.setHeader( QNetworkRequest::ContentTypeHeader, QVariant( "application/x-www-form-urlencoded" ) ); paare.addQueryItem( "username", "myusername" ); paare.addQueryItem( "password", "mypassword" ); postData = paare.encodedQuery(); manager->post( request, postData ); }
Dialog::~Dialog() { delete ui; }
void Dialog::test( QNetworkReply * e ) { qDebug() << e->errorString(); }
|
|
DejaVu |
» 2013-05-06 22:37:54 Komunikacja ze stronami www sprowadza się do wysłania zapytania/odebrania odpowiedzi. Wysyłane zapytanie może zawierać dane dla formularza, a może być to po prostu żądanie pobrania strony. Ty jako program nie 'klikasz' linków, tylko wczytujesz np. href-a i znając swoją np. aktualną lokalizację, wiesz jaki adres strony należy otworzyć. Dodam jeszcze, że jeżeli strona używa intensywnie Javascripta, to nie odczytasz z niej treści, którą wygeneruje Javascript (np. nie pokoloruje Ci kodu źródłowego, jeżeli do tego jest używany Javascript). |
|
Unlimited Temat założony przez niniejszego użytkownika |
» 2013-05-06 22:44:36 Ok rozumiem Cię ale mi np z tym kliknięciem buttona chodziło o to żeby każdy wiedział o co chodzi. Zdaje sobie sprawę, że z poziomu programu nie będzie możliwości kliknięcia w odnośnik tylko trzeba je "jakoś" wywołać zapytaniem. Tylko jak? |
|
DejaVu |
» 2013-05-07 00:03:18 Tak samo jak wysyłasz formularz z zalogowaniem się na stronę :P |
|
Unlimited Temat założony przez niniejszego użytkownika |
» 2013-05-07 00:58:19 No właśnie nie tak samo bo dla formularza jest funkcja addQueryItem() która przyjmuje 2 argumenty: nazwe pola i wartość. Dla "przyciśnięcia" buttona to nie zda egzaminu, a innej funkcji się nie doszukałem. Jakbym wiedział jak to zrobić to bym nie zakładał tematu ;p
No dobra już z zniechęcenia stworzyłem trzeci addQueryItem() z parametrami "login", "Zaloguj" i o dziwo zalogowało się :D Nie wierzę no ale jednak działa.
Ale np już napisanie postu nie działa choć wszystko robię tak samo jak przy logowaniu... :/ |
|
DejaVu |
» 2013-05-07 01:55:31 Skoro nie działa dodawanie postów to znaczy, że czegoś nie wypełniasz lub nie wysyłasz ciasteczek. Poczytaj o tym jak działają przeglądarki albo popatrz za pomocą jakiegoś pluginu jakie nagłówki są wysyłane do stron. |
|
Unlimited Temat założony przez niniejszego użytkownika |
» 2013-05-07 20:05:53 No niestety wysyłam cookie ale nadal nie ma efektu :/ SID jak i użytkownik w cookie się nie zgadza podczas wysyłania postu choć cookie wysyłam :/ #include "dialog.h" #include "ui_dialog.h"
Dialog::Dialog( QWidget * parent ) : QDialog( parent ) , ui( new Ui::Dialog ) { ui->setupUi( this ); manager = new QNetworkAccessManager( this ); connect( manager, SIGNAL( finished( QNetworkReply * ) ), this, SLOT( mySlot( QNetworkReply * ) ) ); QByteArray postData; QUrl paare; request.setUrl( QUrl( "http://127.0.0.1/ucp.php?mode=login" ) ); request.setHeader( QNetworkRequest::ContentTypeHeader, QVariant( "application/x-www-form-urlencoded" ) ); paare.addQueryItem( "username", "user" ); paare.addQueryItem( "password", "password" ); paare.addQueryItem( "login", "" ); postData = paare.encodedQuery(); manager->post( request, postData ); paare.clear(); postData.clear(); request.setUrl( QUrl( "http://127.0.0.1/posting.php?mode=reply&f=2&t=1" ) ); request.setHeader( QNetworkRequest::CookieHeader, var ); paare.addQueryItem( "message", "my message ..." ); paare.addQueryItem( "post", "" ); postData = paare.encodedQuery(); manager->post( request, postData ); }
Dialog::~Dialog() { delete ui; }
void Dialog::mySlot( QNetworkReply * e ) { if( e->error() == QNetworkReply::NoError ) { cookie = manager->cookieJar()->cookiesForUrl( request.url() ); var.setValue( cookie ); qDebug() << "cookies " << request.url().host() << cookie; } else { qDebug() << "ERROR! " << e->errorString(); } }
Wynik debbugera: Uruchamianie C:\Users\Unlimited\Desktop\logowanie-build-desktop-Qt_4_8_1_for_Desktop_-_MinGW__Qt_SDK__Debug\debug\logowanie.exe... cookies "127.0.0.1" (QNetworkCookie("phpbb3_2s5kq_u= 1; HttpOnly; expires=Wed, 07-May-2014 17:59:28 GMT; domain=127.0.0.1; path=/") , QNetworkCookie("phpbb3_2s5kq_k=; HttpOnly; expires=Wed, 07-May-2014 17:59:28 GMT; domain=127.0.0.1; path=/") , QNetworkCookie("phpbb3_2s5kq_sid= 1d20903571857eb86336beca4e7d199e; HttpOnly; expires=Wed, 07-May-2014 17:59:28 GMT; domain=127.0.0.1; path=/") ) cookies "127.0.0.1" (QNetworkCookie("phpbb3_2s5kq_u= 54; HttpOnly; expires=Wed, 07-May-2014 17:59:28 GMT; domain=127.0.0.1; path=/") , QNetworkCookie("phpbb3_2s5kq_k=; HttpOnly; expires=Wed, 07-May-2014 17:59:28 GMT; domain=127.0.0.1; path=/") , QNetworkCookie("phpbb3_2s5kq_sid= dde481c891fa177f8bd4b4920a950773; HttpOnly; expires=Wed, 07-May-2014 17:59:28 GMT; domain=127.0.0.1; path=/") ) C:\Users\Unlimited\Desktop\logowanie-build-desktop-Qt_4_8_1_for_Desktop_-_MinGW__Qt_SDK__Debug\debug\logowanie.exe zakończone kodem 0 Przydała by się pomoc kogoś bardziej zaawansowanego w te klocki. |
|
DejaVu |
» 2013-05-07 21:42:40 Niestety w Qt się nie bawiłem z ciasteczkami, no ale z dużym prawdopodobieństwem problem leży w plikach cookie :) |
|
« 1 » |