【问题标题】:Post request via QNetworkAccessManager通过 QNetworkAccessManager 发布请求
【发布时间】:2011-10-03 05:00:02
【问题描述】:

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

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

使用的SLOT代码为:

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

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

感谢您的帮助。

【问题讨论】:

    标签: qt


    【解决方案1】:

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

    您可以使用类似于that code 的内容处理重定向(和错误)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-12
      • 2021-09-27
      • 2019-01-12
      • 2017-11-21
      • 2020-09-16
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      相关资源
      最近更新 更多