Luger_08
Luger_08

Reputation: 31

Post request via QNetworkAccessManager

I have a problem while working with an object of QNetworkAccessManager class. I want to send a POST request to a web server. My code is

 QNetworkAccessManager *manager; 
    manager = new QNetworkAccessManager (); 
    QNetworkRequest req; 
    req.setUrl(QUrl("http://example.com")); 
    //Configure the parameters for the post request: 
    QByteArray postData; 
    postData.append("Login=log_name&"); 
    postData.append("Password=some_pass"); 
    //Now create a QCookieJar: 
    manager->setCookieJar(new QNetworkCookieJar(manager)); 
    //Define the Request-url: 
    connect (manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinish (QNetworkReply  *))); 
    //Send the request: 
    manager->post(req, postData); 

The code of the used SLOT is:

void MainWindow::replyFinish(QNetworkReply *reply) 
   { 
    QString answer = QString::fromUtf8(reply->readAll()); 
     qDebug () << answer; 
   } 

The problem is that the answer is an empty string,but i believe it should be some html-code that describes acceptance or rejection of the authorization.

Thank you for your help.

Upvotes: 3

Views: 8911

Answers (1)

alexisdm
alexisdm

Reputation: 29886

Most sites use a HTTP redirection after a login request (or after filling a form). And you need to test for error in the same slot.

You can handle redirections (and errors) with something similar to that code.

Since QNetworkAccessManager already create its own base QNetworkCookieJar object, you don't need to instantiate one if you didn't write a derived class or if you don't share a cookie jar with an other manager. But you'll need to use the same manager (or the same cookie jar) for subsequent request to be able to reuse the cookies set by the server during the login.

Upvotes: 2

Related Questions