黑莓10:如何将传入的http回复与之前的http请求对应?

时间:2013-07-16 20:15:21

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

首先,我想说我是BB的新手,我来自Android背景。

我一直在看样品,例如:

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

我有一个应用程序正在制作许多不同(和类似)的Web请求。如何识别这些传入的回复,以便将其拆分为适当的组件?我可以用某种方式标记它们吗?

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

2 个答案:

答案 0 :(得分:2)

正如@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...
}

此外,您还可以获得网络回复的原始标题:

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::User最高QNetworkRequest::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版本)文档:

答案 1 :(得分:0)

您至少有两种方法可以做到这一点:

  1. QNetworkReply,您可以访问原始请求(https://developer.blackberry.com/cascades/reference/qnetworkreply.html#request),您可以在其上设置originatingObjecthttps://developer.blackberry.com/cascades/reference/qnetworkrequest.html#setOriginatingObject以及您的任何其他属性请求
  2. 您可以查看内容网址:https://developer.blackberry.com/cascades/reference/qnetworkreply.html#url