2014-11-04 111 views
1

我正在尝试登录网页,然后下载一些只有会员才能下载的数据。qt发帖并获取请求

我进行请求,并得到要求,由于某种原因,得到请求的第一个成品。

有什么办法可以等待帖子完成或先完成吗?

编辑:

void downloader::LoginToHost() 
{ 
    QNetworkRequest request(QUrl("http://www.example.com/login.php")); 
    request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/x-www-form-urlencoded")); 

    QByteArray data("email=example&password="); 
    manager->post(request,data); 
} 

void downloader::Do_Request(QUrl url) 
{ 
    manager->get(QNetworkRequest(url)); 
} 

void downloader::finished(QNetworkReply * reply) 
{ 
    QMessageBox mess; 

    if(reply->error() == QNetworkReply::NoError) 
    { 
     std::ofstream source("source-code.txt"); 
     QString content = reply->readAll(); 
     source << content.toStdString() << std::endl; 
     source.close(); 

     mess.setText("Done download!"); 
    } 
    else mess.setText(reply->errorString()); 

    mess.exec(); 
} 
+0

哪里是你的代码? – Raptor 2014-11-04 08:54:57

+0

我的错误,我编辑了这个问题。 – JohnMiz 2014-11-04 09:05:21

回答

2

帖子发送和不发送GET,直到后收益和触发QNetworkReply的finished信号。

假设有两个请求,一个岗位,一个是GET,你已经设置了,这里是你能做什么大纲: -

QNetworkRequst postRequest; 
QNetworkRequest getRequest; 

发送postRequest返回一个QNetworkReply ...

QNetworkAccessManager* networkAccessManager = new QNetworkAccessManager; 

QNetworkReply postReply = networkAccessManager->post(postRequest, someData); 
QNetworkReply getReply = nullptr; // C++ 11 nullptr 

然后,您可以连接到postReply完成信号: -

// using a connection to a lambda function, send the get request when post has finished 
connect(postReply, &QNetworkReply::finished, [this, networkAccessManager, getRequest, getReply](){ 

    // handle the reply... 
    ... 
    // send the getRequest 
    getReply = networkAccessManager->get(getRequest); 

}); 
+0

我该怎么做?如何区分完成信号中的请求?对不起,但我是新来的。 – JohnMiz 2014-11-04 09:04:07

+0

向答案添加了示例代码。 – TheDarkKnight 2014-11-04 09:11:16