2012-11-03 99 views
9

如何在執行http請求時設置超時值?http請求中的QNetworkReply和QNetworkAccessManager超時

我有這樣的代碼:

{ 
    QNetworkRequest request; 

    request.setUrl(QUrl("http://www.foo.com")); 
    request.setRawHeader("User-Agent", USER_AGENT.toUtf8()); 
    request.setRawHeader("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7"); 
    request.setRawHeader("Accept", 
     "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); 
    request.setRawHeader("Accept-Language", "en-us,en;q=0.5"); 
    request.setRawHeader("Connection", "Keep-Alive"); 

    reply = m_networkManager->get(request); 
    QEventLoop loop; 
    connect(reply, SIGNAL(finished()), &loop, SLOT(quit())); 
    loop.exec(); 
} 

在哪裏和怎樣安裝某種超時的請求?

回答

21
QTimer timer;  
timer.setSingleShot(true); 

QEventLoop loop; 
connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit())); 
connect(reply, SIGNAL(finished()), &loop, SLOT(quit())); 
timer.start(30000); // 30 secs. timeout 
loop.exec(); 

if(timer.isActive()) { 
    timer.stop(); 
    if(m_reply->error() > 0) { 
     ... // handle error 
    } 
    else {  
     int v = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); 

     if (v >= 200 && v < 300) { // Success 
     ... 
     } 
    } 
} else { 
    // timeout 
    disconnect(reply, SIGNAL(finished()), &loop, SLOT(quit())); 

    reply->abort(); 
} 
+2

不要忘記刪除回覆。 – Dave