c++ - 黑莓 10 : How to correspond incoming http replies to their previous http request counterparts?

标签 c++ qt blackberry blackberry-10 blackberry-cascades

首先,我想说我是 BB 的新手,而且我有 Android 背景。

我一直在查看示例,例如:

https://developer.blackberry.com/cascades/documentation/device_comm/networking/

我有一个应用程序发出许多不同(和相似)的 Web 请求。我如何识别这些传入的回复,以便我可以将它们解复用到它们适当的组件?我可以用某种方式标记它们吗?

谢谢,如果我能说得更清楚,请告诉我。

最佳答案

正如@Kernald 上面所写,您可能请求的所有信息都可以在QNetworkReply 对象中找到。通过调用 QNetworkAccessManager::get()QNetworkAccessManager::put()

发出请求后,您将获得指向此对象的指针

当您收到回复时,它会通过 QNetworkAccessManager::finished(QNetworkReply *reply) 信号传送

在这里,您可以通过指向相应 QNetworkRequest 的指针访问对应对象,其内容取决于您所追求的内容

QNetworkAccessManager* networkAccessManager;

// skipped

bool result = connect(networkAccessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*)));
Q_ASSERT(result);

// skipped 

void requestFinished(QNetworkReply* reply) {
    QNetworkRequest* request = reply->request();
    QUrl url = request->url(); // get the URL
    QVariant header = request->header(); // get the header
    // etc...
}

此外,您还可以像这样获取网络回复的原始 header :

QByteArray hdr;
QList<QByteArray> list = reply->rawHeaderList();
Q_FOREACH(hdr, list){
        qDebug() << hdr;
}

如果由于某种原因这还不够,您可以通过将 QNetworkRequest::Attribute 分配给 QNetworkRequest 对象来手动标记网络请求:

QNetworkRequest request; // Create and send the network request
QNetworkRequest::Attribute attr = QNetworkRequest::User+1; // any unique value greater than QNetworkRequest::User
QString myStuff;
request.setAttribute(attr, myStuff);

这些属性值必须大于 QNetworkRequest::UserQNetworkRequest::UserMax。之后,您可以通过以下方式获得先前分配给请求的属性:

void requestFinished(QNetworkReply* reply) {
    QNetworkRequest* request = reply->request();
    QNetworkRequest::Attribute myAttr = QNetworkRequest::User+1;
    QVariant myStuff = reply->request().attribute(myAttr);
    // do something further
}

这是关于此的官方 BB10 和 Qt(当前用于最新的 Blackberry 10 SDK 的版本 4.8)文档:

关于c++ - 黑莓 10 : How to correspond incoming http replies to their previous http request counterparts?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17686132/

相关文章:

c++ - 什么是 std::decay 以及何时应该使用它?

c++ - QML Coverflow 非常慢

c++ - SFML/C++ Sprite 在特定点后消失

c++ - 无法在 Qt Widget 上绘制,显示错误 "paintEngine: Should no longer be called"

blackberry - 在 BlackBerry 上使用 Bouncy CaSTLe 进行 RSA 填充

java - 在 BlackBerry java 上显示日文字符时出现问题

android - 如何检查目录和文件是否存在于 Phonegap 框架中?

c++ - const 对象的复制构造函数

c++ - 如何向加密狗传递AT指令?

qt - 在多个平台上将像素大小转换为字体大小