2011-10-02 100 views
3

我在使用QNetworkAccessManager类的对象时遇到问题。 我想发送POST请求到Web服务器。 我的代码是通过QNetworkAccessManager的发布请求

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); 

使用的插槽代码:

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

的问题是,答案是一个空字符串,但我相信它应该是一些HTML代码描述 接受或拒绝授权。

谢谢你的帮助。

回答

2

大多数网站使用HTTP重定向登录请求后(或填充形式之后)。您需要在同一个插槽中测试错误。

您可以处理类似于that code东西重定向(和错误)。

由于QNetworkAccessManager已经创建了自己的基地QNetworkCookieJar对象,如果您没有编写派生类或者如果您不与其他经理共享cookie罐,则不需要实例化一个对象。但是您需要使用相同的管理器(或同一个cookie jar)以便后续请求能够在登录期间重用服务器设置的cookie。