c++ - http请求中的QNetworkReply和QNetworkAccessManager超时

标签 c++ timeout qnetworkaccessmanager

当我发出一个 http 请求时如何设置超时?

我有这个代码:

{
    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();
}

我在哪里以及如何为请求设置某种超时?

最佳答案

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

关于c++ - http请求中的QNetworkReply和QNetworkAccessManager超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13207493/

相关文章:

带有描述的 C++ 智能感知

c++ - 使用具有不同大小的第二行 C++ 的二维数组

timeout - Jetty 超时重播请求

PHP session 超时为 0,但 session 仍将过期

python进程池在每个进程上都有超时不是所有的池

c++ - Twitter OAuth2 的 QNetworkRequest 返回禁止错误

c++ - unique_lock::unlock 在 C++11 标准中未指定吗?

c++ - 当我尝试将一个信号连接到插槽时,Qt 代码无法编译

qt - 如何使用 QT QWebView 管理代理

Qt QNetworkAccessManager 和多个QNetworkReply